Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

mod_ruby

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上で動かしてみると

Internal Server Error

と出力されます。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秒間に処理されたリクエスト数だけでもこんなに開きがあるとは、びっくりでした。