mod_rubyをインストールしてみました。
Debianの/etc/apache2/のディレクトリ構成は整理されていて分かりやすいです。こんな感じで設定しました。
/etc/apache2/mods-available/ruby.confを以下のように作成し、
<IfModule mod_ruby.c> RubyRequire apache/ruby-run <Location /home/*/public_html/cgi-bin> SetHandler ruby-object RubyHandler Apache::RubyRun.instance Options +ExecCGI </Location> <Files *.rbx> SetHandler ruby-object RubyHandler Apache::RubyRun.instance </Files> </IfModule>
/etc/apache2/mods-enabled/で、以下のようにシンボリックリンクを張ってあげます。
mmasa@debian:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/ruby.conf .
そのあと、webサーバを再起動すると、mod_rubyが有効になりました。
せっかく設定したので、早速、テストをしてみました。
http://d.hatena.ne.jp/rahaema/20080609 で作成した、word_freq.rbをword_freq.rbxというファイル名でコピーし、mod_ruby上で動かしてみると
と出力されます。error.logには、SecurityErrorが出ていました。
http://wiki.modruby.net/ja/?FAQ
を参考に、word_freq.rbxの以下の行を変更すると、
url = cgi.params['url'][0].untaint
無事、動作するようになりました。
CGIは遅い??
次は、よく、cgiは遅いと言われていますが、どの位mod_rubyと比較して遅いんだろうと思ったので、性能比較を行ってみました。
mmasa@debian:~$ sudo ab -n 200 -c 10 http://localhost/~mmasa/cgi-bin/word_freq/word_freq.rb?url=http://192.168.7.50/~mmasa/
結果は、
- word_freq.rb (CGI)
Requests per second: 19.10 [#/sec] (mean)
- word_freq.rbx (mod_ruby)
Requests per second: 180.20 [#/sec] (mean)
となりました。いろいろな測定条件で比較する必要があると思いますが、1秒間に処理されたリクエスト数だけでもこんなに開きがあるとは、びっくりでした。