Trac を設置するときは静的ファイルを分離すると速い
Trac のマニュアル (TracCgi) に書いてあることだけど、意外と知らない人がいそうなのでメモ。 特に、レンタルサーバに CGI として設置する場合には重要なポイント。
デフォルト状態の問題
Trac をデフォルトの状態で動かすと、 Trac のロゴやスタイルシートや JavaScript ファイルが、みんな Trac プログラム経由でのアクセスとなる。 例えば、 Trac を CGI として
http://www.example.jp/trac.cgi
に設置したとすると、 Trac のロゴは
http://www.example.jp/trac.cgi/chrome/common/trac_logo_mini.png
という URL になる。 Firebug などで見れば分かるけど、すべて CGI を経由するので負荷がかかってレスポンスが遅くなる。
対策…静的ファイルの分離
静的ファイルを Web サーバから直接参照できる場所に置くことで、負荷を大きく下げることができる。 Trac の静的ファイルは、ソースから入れた場合は
/opt/local/share/trac/htdocs
に入っている。 ディレクトリは環境によって /usr/local/share だったり、 $HOME/share だったりする。 setup.py を使った場合は
/opt/local/lib/python2.5/site-packages/Trac-0.11b1-py2.5.egg/trac/htdocs
あたりに入ってる(うちの MacBook Pro の場合)。
このディレクトリを、 Web サーバの DocumentRoot 以下からシンボリックリンクを張って参照できるようにする。
$ cd /var/www $ ln -s $TRAC_HTDOCS trac_common
※ TRAC_HTDOCS は前述の htdocs ディレクトリの場所に読み替えて
次に、 trac.ini を編集して Trac にこの静的ファイルの場所を教えてあげる。 [trac] セクションの htdocs_location に指定する。
[trac] htdocs_location = /trac_common
こうすれば、先ほどのロゴの URL は
http://www.example.jp/trac_common/trac_logo_mini.png
になる。 こうすれば画像やスタイルシートの読み込み時に CGI が起動されなくなる。
ちなみに
僕は Subversion が使えて自由度の効く TextDrive に Trac を設置しているけど、海外にサーバがあるので遅延が大きい。 なので、静的ファイルだけを国内の別サーバから取得するようにしている。 さっきの例で言うと、 Trac 本体が
http://www.example.jp/trac.cgi
とすると、静的ファイルは、
http://static.example.jp/trac_common/trac_logo_mini.png
という感じ。 trac.ini にも以下のように書いている。
[trac] htdocs_location = http://static.example.jp/trac_common
レンタルサーバの場合は体感的にわかるほどの違いがあるので、ぜひやってみるといいよ。