CombConfの発表が2日後に迫っているにも関わらず他の技術に手がでます。
組み込み向けのRubyであるmrubyをApacheに組み込めるようにした、mod_mrubyというものをFreeBSDで動かしてみようかと思って手を出したら大苦戦しました。
とりあえず動いたには動いたという状況ですが、簡単なメモとベンチマークを取ってみました。
2013/2/17追記
mod_mrubyの更新によって手順が変わりました⇒ mod_mruby on FreeBSD
導入はmod_mrubyのページと同じようにやればいいのかと思いきや、makeでエラーを吐いてしまいます。
$ make make: illegal option -- - usage: make [-BPSXeiknpqrstv] [-C directory] [-D variable] [-d flags] [-E variable] [-f makefile] [-I directory] [-j max_jobs] [-m directory] [-V variable] [variable=value] [target ...] rake aborted! Command failed with status (2): [make -C src --no-print-directory CC='gcc' ...] Tasks: TOP => default => all (See full trace by running task with --trace) *** [libmruby.a] Error code 1 Stop in /root/mod_mruby.
どうもmrubyのRakefileがLinux向けのようで、makeをgmakeに書き換える必要があるようです。
$ nano tmp/mruby/Rakefile #MAKE = ENV['MAKE'] || 'make' MAKE = ENV['MAKE'] || 'gmake'
mrubyは1回mod_mrubyをmakeをしないとRakefileが存在しないので注意です。
あとはWarningが出ますがとりあえずスルーして、make installすればApacheにモジュールが登録されます。
あとはhttpd.confに、
AddHandler mruby-script .mrb
と書き加えれば普通にmrubyファイルが動くはずなのですが……
自分の環境(Freebsd 9.1-BETA1 amd64, Apache/2.2.23 Event MPM)な環境では、httpdを起動した直後からCPUをバカ食いする上、リクエストに全く応答しなくなるという状況に陥ってしまい、解決策が分からなくなりました。
そんなことをTwitterで呟いたら、mod_mrubyの作者である、matsumoto-rさんから
@kyonfuee 現状、きちんと対応しているのはpreformでworkerもeventも一応動くのですが、不安定です。preforkで試してもだめでしょうか?
— Ryosuke Matsumoto / まつもとりー (@matsumotory) December 21, 2012
という指摘を頂きました。試しに(FreeBSD 9.0 i386, Apache/2.2.22 Prefork MPM)な旧サーバーで試したところ、何も問題がないかのように動きました。
どうもApache 2.2でEvent MPMをやるのはだめみたい……?