忘れたときに備えた記録
2005-03-17(Thursday) 公開
[メモ] Apache + Subversion
公開してみたら、いきなりうまく動かなかった。がっかり
翻訳作業のデータをSubversionのリポジトリで管理していて、今まではsvn+sshを使っていたのを、Apacheとmod_dav_svnを使ってみることにしたのだけど、コミットするときになぜか
svn: PROPFIND リクエスト (相手: '/svn') が失敗しました svn: PROPFIND (URL: '/svn'): 301 Moved Permanently (http://cs)
というエラーが出てしまう。ちなみにこれはLinuxのコンソール版クライアントで出たエラー。TortoiseSVNでも似たようなエラーが出る。
さんざん調べて、原因がApacheの設定におけるDocumentRootにあるらしいということが分かった。
ディレクトリ構成は
/var/project/
+--svn/
<VirtualHost *> ServerName project.hinet.mydns.jp DocumentRoot /var/project
Options -Indexes <Location /svn> DAV svn SVNPath /var/project/svn </Location>
</VirtualHost>
とこんな感じ。実際はポートが443でSSLを使って認証がどうたらこうたらという設定も書いてあるんだけど、今回の話とは関係がないので割愛。また、ディレクトリ名なんかもprojectというのではないのだけど、あくまで例ということで。
この設定でサーバを動かすと、ブラウザからはhttp://project.hinet.mydns.jp/svnに接続できてちゃんとリポジトリの内容も表示されるのだけど、Subversionのクライアントを使うとコミットもチェックアウトも出来ない。
で、色々と設定をいじって確かめていると、DocumentRootをコメントアウトすれば正常に動作することが判明。出来ればDocumentRootも使いたかったのだけど結局あきらめて、svnリポジトリ用のと、ドキュメント用の2つのバーチャルホストを作ることに。
というのが、2時間ほど前の話。実はなんとDocumentRootが原因ではありませんでした。
ここで注目するべきなのは、実際にリポジトリが入っているディレクトリ/var/project/svnと、Locationで指定したhttp経由でリポジトリを指定する場合のhttp://project.hinet.mydns.jp/svnが、DocumentRootから見ると同じディレクトリを指していること。
mod_dav_svnでは、Locationで指定したディレクトリと同じ場所に、実際にディレクトリが存在しているとエラーが出る模様。
なので、ディレクトリ構成を
/var/project/
+--svnrepository/
<Location /svn>
DAV svn
SVNPath /var/project/svnrepository
</Location>
svn copyが出来なくて完全に鬱状態でしたがこのページのお陰で助かりました。本当にありがとうございます。
同じ,<br>「301 Moved Permanently 」<br>で途方に暮れていたので助かりました.ども.
どうにも動かなくて困ってました。<br>ホント助かりました。感謝感謝。
私も助かりました!ありがとうございます.
まじで助かりました。こんな落とし穴があるとはまいった。
ググっってたどり着きました!そんな弊害があったとは・・!<br>ほんとに助かりました!ありがとう!^^
上に同じく助かりましたm_ _m
ありがとうございます!たすかった!
ありがとうございます。この記事のおかげで直せました。