mod_perlデビュー!!

ようやく、という感じでmod_perlの世界に足を踏み入れることができました。
Perlを使おうと思ったのはこのmod_perlというものの存在を知ったことが大きなきっかけとなっています。サーバーサイドJavaが登場してJava Servletはリクエストのたびにプロセスを起動しないので(いちいちプロセスを起動する)CGIに比べて高速だ。という解説を3、4年(くらいかな?)前に読んで、そのわかりやすい違いに納得し、CGIダメじゃん-->Perlもダメみたいな先入観があったのですが、ところがどっこい。である。

    • -

今回はmod_perlでも従来のCGIでも使えるCGI::Application::Dispatchを使用してBBSを作っていたので、最初はCGIで動かしながら作って、ある程度できたらmod_perlに移項しようというシナリオでした。

    • -

mod_perlのインストールにちょっとてこずったのでメモ。OSはDebian(sarge)、Apacheは1.3.33、mod_perlは1.29です。
以下の二つのサイト
MovableType を mod_perl (Apache::Registry) 環境下で動かす方法 : NDO::Weblog
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl.html
を参考にして始めました。

    • -

mod_perlをDSO(Dynamic Shared Object)としてインストールします。APXSというやつが必要なようで、それは存在しなかったのでインストール。
Debian -- Error

sudo apt-get install apache-dev

mod_perlをダウンロードして、解凍、ビルド、インストール。
でもなんかうまくいかない。以下のコマンド

sudo /usr/sbin/apachectl configtest

Apacheの設定ファイルをテストしたらエラー。たしかlibperl.so(mod_perlのバイナリ?)に対応する.infoファイルがないと言われる。ここでいろいろ調べた結果、apt-getでインストールしなおすことに決める。
Debian -- Error

sudo apt-get install libapache-mod-perl

でもまだエラーが出る。ちょっと考えた結果、先にビルドしたlibperl.soを削除することに決定(apt-getでインストールされたsoはmod_perl.soになってる)。
これでOKなようだ。
Apache::Statusってのもちゃんと動いているようだ(参考にしたサイトを参照)。
次はCGI::Application::Dispatchの設定。
ここを見ながらやる。
CGI::Application::Dispatch - Class used to dispatch request to CGI::Application based objects - metacpan.org
こんな感じでやればよいようだ(結構試行錯誤した)。


  
    SetHandler perl-script
    PerlHandler CGI::Application::Dispatch
    PerlSetVar CGIAPP_DISPATCH_PREFIX BBS
    PerlSetVar CGIAPP_DISPATCH_DEFAULT /Index
    PerlSetEnv PERL5LIB /home/takatoshi/projects/bbs2/lib
  

ポイントはPERL5LIBに自分が作ったモジュールのパスをセットするところ。
これはどこにも書いてなかったので探すのに少し苦労した。
http://www.apacheref.com/ref/mod_perl/PerlSetEnv.html

    • -

こんな感じですか。
たいしたプログラムではないので速度が向上したかどうかは、はっきり言ってよくわからない。
今度はApache::Registryを使ってみたい。