私は過去数日間、コミット後の電子メール通知をSVNサーバー(Ubuntu 9.10上のApache2でHTTP経由で実行)で機能させるのに苦労してきました。 SVNコミットは正常に機能しますが、何らかの理由でフックが適切に実行されていません。
構成設定は次のとおりです。-ユーザーは、Apache dav_svnモジュールを使用してHTTP経由でリポジトリにアクセスします(dav_svn.passwdファイルにhtpasswd経由でユーザー/パスワードを作成しました)。
dav_svn.conf:
<Location /svn/repos>
DAV svn
SVNPath /home/svn/repos
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/Apache2/dav_svn.passwd
Require valid-user
</Location>
/ home/svn/repos/hooks/post-commit:
#!/bin/sh
REPOS="$1"
REV="$2"
/bin/echo 'worked' > ${REPOS}/postcommit.log
リポジトリ全体をwww-data(Apacheユーザー)が所有するように設定し、コミット後のスクリプトに755のアクセス許可を割り当てました
空の環境でwww-dataユーザーを使用してコミット後のスクリプトをテストすると、次のように機能します。
Sudo -u www-data env - /home/svn/repos/hooks/post-commit /home/svn/repos 7
しかし、クライアントマシンでコミットすると、コミットは成功しますが、コミット後のスクリプトが実行されていないようです。
また、pre-commitフックの簡単なスクリプトを実行しようとしましたが、空のpre-commitスクリプトを使用しても、エラーが発生します。
「コミットに失敗しました(詳細は次のとおりです):フックのnull標準出力を作成できません '/ home/svn/repos/hooks/pre-commit':アクセスが拒否されました」
このエラーについてGoogleで数回検索しましたが、これは、特に/ dev/nullを実行するための適切な権限を持たないApacheユーザー(www-data)の問題であると推測されます。また、ポストコミットがサイレントに失敗する理由は、stdoutでレポートされないためだと読みました。
とにかく、リポジトリ全体の所有権をApacheユーザー(www-data)に与えようとし、サーバールートでの操作を許可するようにApache仮想ホストを編集しましたが、まだ許可が拒否されています
/etc/Apache2/sites-available/primarydomain.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
任意のアイデア/提案をいただければ幸いです!ありがとう
そのため、これまでで最高のホスティングプロバイダーであるRailsPlaygroundの非常に役立つシステム管理者とこの問題について話し合った後、/ dev/nullの権限をに設定することで問題を修正することができました。
crw-rw-rw- 1 root root 1, 3
そして今、すべてのSVNフックは期待どおりに機能します。