tracで複数リポジトリ(2)
前回のエントリにmobcovさんよりコメントをいただいたので説明を追加しましょう。
<Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend </Location> <Location /trac/cocktail> PythonOption TracEnv c:/home/ishigaki/trac/cocktail/ PythonOption TracUriRoot /trac/cocktail </Location> <Location /trac/perl> PythonOption TracEnv c:/home/ishigaki/trac/perl/ PythonOption TracUriRoot /trac/perl </Location> ってすればいいような気がするのは気のせい?
まず、これは /trac にアクセスしたときに(404 Not Foundではなく) 500 Internal Server Error が出ます。PythonHandlerを指定したら trac.cgi のコピーが不要になるくらいですから当然ですね。こういう場合はおとなしく
<Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir c:/home/ishigaki/trac/ PythonOption TracUriRoot /trac </Location>
としておくのが吉です。
ではどうして前回
<Location /trac/cocktail> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/ishigaki/trac/cocktail/ PythonOption TracUriRoot /trac/cocktail </Location> <Location /trac/perl> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/ishigaki/trac/perl/ PythonOption TracUriRoot /trac/perl </Location>
とかするのがたぶん一番柔軟で簡単と書いたかというと、本当はこういうのを想定していたため。
<Location /ishigaki/trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/ishigaki/trac/ PythonOption TracUriRoot /ishigaki/trac </Location> <Location /mobcov/trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/mobcov/trac/ PythonOption TracUriRoot /mobcov/trac </Location>
同じサーバを複数人で共用している場合、親ディレクトリが一致しませんので TracEnvParentDir は使えません。あるいは、次の例もそう。
<Location /trac/perl> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/ishigaki/trac/perl PythonOption TracUriRoot /trac/perl </Location> <Location /trac/cocktail/book> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/ishigai/trac/cocktail/book PythonOption TracUriRoot /trac/cocktail/book </Location> <Location /trac/cocktail/recipe> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/ishigai/trac/cocktail/recipe PythonOption TracUriRoot /trac/cocktail/recipe </Location>
/trac/perlと/trac/cocktailだけならTracEnvParentDirも使えますが、この場合は /trac/cocktail_book と /trac/cocktail_recipe というディレクトリを用意するのではなく、/trac/cocktail の下に book と recipe という trac を用意したため、素直に TEParentDir を使おうとすると、/trac/cocktail の部分で 500 エラーになる。それを防ぐための処理。もちろんこの /trac/cocktail 以下を TracEnvParentDir でまとめることはできますけれどね。
もう少し実際的なところだと、こういうのもありかもしれない。
<Location /trac_local> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir c:/home/ishigaki/trac PythonOption TracUriRoot /trac_local </Location> <Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv c:/home/ishigai/trac/perl PythonOption TracUriRoot /trac </Location>
これは、ローカル環境からは /trac_local にアクセスすれば /trac_local/cocktail も /trac_local/perl も見られるんだけど、外部には /trac という名前で /trac/perl のみ公開、というパターン。本当はこうせず、バーチャルホストをたててポート分けするとか、ドメイン分けするとかした方がきれいなんですが、それはみなさんの方でお試しあれ。
ちなみに、TracEnvParentDir にはサーバを再起動しなくても trac の数を増やせるという利点があります。TracEnv の方は設定を追加したらサーバの再起動が必要です。適宜使い分けるのが吉です。