2008-03-13 (木)
■ 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
レンタルサーバの場合は体感的にわかるほどの違いがあるので、ぜひやってみるといいよ。
私はTracEnvフォルダのhtdocsも分離したかったので、<br>Apache(.htaccess)で制御するようにしています。<br>いずれにしても、trac.cgi回避の効果は大きいですね。
内容とまったく関係がない話題ですが、<br>例としてのdomain名に、example.jpを使うのは<br>正当でしょうか(純粋な疑問)?<br>(example.com, example.net, example.orgならば<br>RFC2606で理解できる)<br><br>http://www.example.com/<br>http://www.rfc-editor.org/rfc/rfc2606.txt<br>http://res-dom.iana.org/
横から失礼。hyukiさん宛て。<br>JPRSさんによると例示可能だそうです。<br>http://jprs.jp/info/faq.html#27<br>http://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html
>hyukiさん<br>RFCではないですが、JPRSで例示用として予約されているようですね。<br>example1.jp なども使えます。<br>http://jprs.jp/info/faq.html#27
なるほど、理解しました。他人のCPUを使って検索してしまい、すみません。ありがとうございます。www.example.jpにアクセスしたらその説明文がでるとよいのになあ、と勝手ながら思いました。(^_^)