SVNサーバ兼WEBサーバで、コミット契機にWEBサイトを更新
けっこうハマった。
WEBサイトの中身をまるまるSVNで管理しているようなケースです。
(今回の場合、Wordpressのテーマ開発の為に一時的に使いました。
後々考えれば、ローカルに仮想マシンを立てたりした方が手間が少なかったかも知れません。)
Subversionでコミットすると同時にWEBサイトを更新する場合、
hooks/post-commit に svn update コマンドを書けばいけると思っていましたが、
以下のようなエラーが出て、うまくいきませんでした。
svn: MERGE of '/xxxx': 200 OK (http://zzzz)
xxxx箇所:リポジトリ内のフォルダの相対パス
zzzz箇所:リポジトリのルートのURL
原因は、Basic認証にあります。
まず最初に svn update 対象のフォルダに svn checkout しておきますが、
この時、http://~で始まるリポジトリURLを使うと、HTTPDのBasic認証を通るようになります。
初回チェックアウトの際にパスワードを保存した気で居ましたが、
このパスワードはUNIXユーザ毎に保存されるので、
HTTPD名義で動く post-commit では svn update に失敗していたというわけです。
初回チェックアウトの際に、file:///で始まるリポジトリURLを使う事で回避できます。
以降、 svn up をする時も、HTTPDは経由しません。
私の環境の場合、以下のようになりました。
svn co file:///var/svn/repo/trunk/xxx/
chown -R apache:apache xxx/

