mod_pythonでも効果があったので、trac.cgi経由の場合はもっと顕著に効果が出そう。
$ ab -c 10 -n 100 http://example.com/tracdocs/css/trac.css | grep 'Requests per sec' Requests per second: 376.00 [#/sec] (mean)
webサーバのCPUはほとんど使われない。
- trac(mod_python)で応答した場合
$ ab -c 10 -n 100 http://example.com/trac/chrome/common/css/trac.css | grep 'Requests per sec' Requests per second: 111.67 [#/sec] (mean)
webサーバのCPUは100% 近くに張り付く。
設定
webサーバ側の設定
Alias設定するか、symlinkをdocment root以下に設定するか。
自分がpython, trac(setup.py)をソースで入れた場合は、trac本体は
/usr/local/lib/python2.6/site-packages/Trac-0.11.5.ja1-py2.6.egg/trac/
にあった。で、このままでもいいけど、PATHを簡単にするために自分は
ln -s /usr/local/lib/python2.6/site-packages/Trac-0.11.5.ja1-py2.6.egg/trac/ /usr/local/trac
としています。なので
Alias /tracdocs /usr/local/trac/htdocs <Directory /usr/local/trac/htdocs> ## 必要ならアクセス許可とかを設定 </Directory>
- symlinkの場合
ln -s /usr/local/trac/htdocs /path/to/docment_root/tracdocs
webサーバ側で強制的に対処する
trac.iniの編集不要。
複数のtracプロジェクトを置くサーバとかで。
(そんなに気にしないでいいかもしれないけど)
各担当者がそれぞれtrac作る場合はtrac.iniにhtdocs_locationを書いてくれないかもしれない。
(書かなかってもアクセスできて正常に表示できるのだから)
(一担当者はサーバのリソースなんか気にしないだろうし)
というわけで性悪説的にtrac.iniの設定なんかしてくれないだろう
でもサーバのリソースは極力無駄に使いたくない
ということを考えて、mod_rewriteで飛ばしてみた。
trac.iniに設定をしていなければ
(TracUriRootが/tracだとすると)
各tracのcssなどへのアクセスは
http://example.com//trac/proj1/chrome/common/trac.ico
http://example.com//trac/proj2/chrome/common/css/trac.css
となるので
Alias /tracdocs /usr/local/trac/htdocs RewriteEngine On RewriteCond %{REQUEST_URI} ^/trac/[[:alnum:]]+/chrome/common/ RewriteRule ^/trac/[[:alnum:]]+/chrome/common/(.*) /tracdocs/$1 [L,PT]
で、できた。