trac と Django アプリケーションをapache+mod_pythonで
社内向けDjangoアプリを公開するためにapacheをセットアップして、ついでに課題管理用にtracをセットアップしてみた。
そしたら半日くらいはまったのでメモしておく。
環境は apache 2.0.59, mod_python 3.3.1, python 2.4, Django 0.96, trac 0.10.3.1-ja
理想としては http://www.djangoproject.com/ みたく、
としたかったんだけど、ネットワークの知識がないので断念した。
しかたないので、
という風にしようとhttpd.confをこう書いたら、tracサイトにアクセスできない。
/trac以下もDjangoにハンドルされているようだ。
<Location /> PythonPath "['d:/django'] + sys.path" SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE djangoproject.settings PythonDebug off </Location> <Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv d:/trac/tracproject </Location>
それなら、といことで安易に
としようとしたら、tracサイトは見れるけどDjangoアプリは404だらけでまともにアクセスできなくなった。
URLマッパーが/djangoを切り取らないからっぽい。
というかlogin_requiredデコレータが/account/loginにリダイレクトするので困った。
いろいろ試行錯誤していたら、上記の設定をVirtualHostで囲んだら動いた。理由はよく分からない。
ついでにSubversionでWebDAVも設定してみる。
結果としてこんな構成になった。
物理的な構成はこんなかんじ。
- d:/django/djangoproject -> Djangoプロジェクト
- d:/www/media -> Djangoの管理画面用メディアファイル
- d:/www/site_media -> Djangoプロジェクト用メディアファイル
- d:/trac/tracproject-> tracプロジェクト
- d:/svn/repo-> Subversionリポジトリ
tracプロジェクトとSubversionリポジトリのアカウントは共通化した。
本当はDjangoの認証を利用したかったけど、うまくいかなかった。
httpd.confはこんなかんじ
DocumentRoot "d:/www" LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule python_module modules/mod_python.so LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so" LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so" <VirtualHost *> #for Django <Location /> PythonPath "['d:/django'] + sys.path" SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE djangoproject.settings PythonDebug off </Location> <Location /media> SetHandler None </Location> <Location /site_media> SetHandler None </Location> #for trac <Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv d:/trac/tracproject </Location> <Location /trac/login> AuthType basic AuthName "Trac" Require valid-user AuthUserFile d:/trac/tracproject/.htpasswd </Location> </VirtualHost> #for Subversion <location /svn> DAV svn SVNPath d:/svn/repo AuthType basic AuthName "Subversion" Require valid-user AuthUserFile d:/trac/tracproject/.htpasswd </Location>