12. apache に Trac をホストさせる

こちらについても改めて書くほどでもないので、ざっくりと書いていきます。
Trac は、CGI, FastCGI, mod_python, mod_wsgi といった手段で apache 上でホストできますが mod_python は推奨されない古い形式なので mod_wsgi を使用します。
mod_wsgi は、http://code.google.com/p/modwsgi/ からバイナリが手に入ります。ApachePython のバージョンが合うものをダウンロードして modules フォルダに mod_wsgi.so という名前で保存すれば OK でしょう。
Trac の管理コンソールから

Trac [D:\trac\project1]> deploy C:\temp

と、deploy コマンドを実行すると、指定した場所に Trac の設定ファイル群がドサッと作成されます。ツリー構造は、

 cgi-bin/
    trac.cgi ... CGI でホストする場合の実行ファイル
    trac.fcgi ... FastCGI でホストする場合の実行ファイル
    trac.wsgi ... mod_wsgi でホストする場合の実行ファイル
 htdocs/
    common/ ... Trac の固定リソース ファイル群
    site/ ... このプロジェクトの固定リソース ファイル群

というようになっています。この中で今回使うのは、cgi-bin/trac.wsgi と htdocs/common/ です。まずは、htdocs/common を apache の DocumentRoot 下にコピーします。

PS temp> Move-Item "C:\temp\htdocs\common" `
>> "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\trac-common"

デフォルトの htdocs を移動していなければ、こんなかんじでファイルをコピーします。(これは移動していますが) htdocs の下に trac-common という名前で配置したので、trac.ini の htdocs_location に /trac-common と設定しておくことで、固定のリソースファイルの取り出しに Python のハンドラを経由しなくてよくなります。
cgi-bin/trac.wscgi についても同様に実行可能な場所にコピーします。デフォルトでは、そんな実行可能フォルダは存在しないので、どこかに場所を作って保管します。

PS temp> mkdir D:\trac\bin
PS temp> Copy-Item C:\temp\cgi-bin\trac.wsgi `
>> D:\trac\bin\project1.wsgi

とりあえず適当なフォルダに移動しています。また project1 に接続する設定なのでファイル名も変えています。apache の設定ファイルに、このフォルダと project1.wsgi を登録します。

# mod_wsgi の読み込み
LoadModule wsgi_module modules/mod_wsgi.so

# trac.wsgi を保存したディレクトリを実行可能にする
<Directory "D:/trac/bin">
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

# /project1 という URL で project1.wsgi を動かす
WSGIScriptAlias /project1 "D:/trac/bin/project1.wsgi"

これで、http://localhost/project1 という URL にアクセスすると Trac が無事に起動しているのが見えると思います。Subversion と同様に、trac も指定したフォルダの下をすべてプロジェクトとして使用することができます。たとえば、次のようなファイルを trac.wsgi として作成します。

import os

def application(environ, start_request):
    os.environ['TRAC_ENV_PARENT_DIR'] = 'D:\\trac'
    os.environ['PYTHON_EGG_CACHE'] = 'D:\\trac\\.eggs'
    from trac.web.main import dispatch_request
    return dispatch_request(environ, start_request)

このファイルを apache に登録します。

WSGIScriptAlias /projects "D:/trac/bin/trac.wsgi"

この例だと /projects という URL に登録しているので、project1 にアクセスするには http://localhost/projects/project1 という URL になります。D:\trac の下に proj2 という名前で新しい Trac の環境を作成した場合は、自動的に http://localhost/projects/proj2 という URL でアクセスできるようになります。