かなり昔(確かApache2.0が出た頃)にWindows2000でmod_perlを使ってみようとして挫折したままでした。
なぜ動かなかったのかまでは、はっきり覚えていません。
心機一転、改めてmod_perlに挑戦です。
OSはCentOS5.2、Apacheは2.2.3、mod_perlは2.0.2です。
まずは、mod_perlをインストールします。
yum -y install mod_perl
パッケージが見つかるとインストールが開始され・・・ずに、
Parsing package install arguments Package mod_perl - 2.0.2-6.3.el5.i386 id already installed.
つまり、既にインストールされているとのこと。
手間が省けてラッキーなのか、必要のないモジュールをロードしていたのは問題なのかは気にしてはいけません。
次に、httpd.confを設定しますが、この環境ではperl.confから設定をロードしているので、そのファイルの編集します。
LoadModule perl_module modules/mod_perl.so
これは先述の通り、インストール済みでロード済みなので、このまま。
仮にコメントアウトされているなら外します。
次に、スクリプトの起動設定ですが、perl.confで弄ると、なぜか500エラーになってしまうので、.htaccessで設定を行うことにします。本当はエラーの原因を見つけ出して修正できればいいのですが、まだまだ勉強が必要のようです。
httpdをrestartして問題がなければ、.htaccessの設定に移りましょう。
# mod_perl <IfModule mod_perl.c> <Files ~ "\.(cgi|pl)$"> SetHandler perl-script PerlHandler ModPerl::Registry PerlSendHeader On </Files> </IfModule>
そもそも、拡張子の.cgiと.plはAddHandler cgi-scriptで設定してあるので必要ないのかもしれませんが、一応付けておきます。
mod_perlが実行できるかどうかは、
#!/usr/bin/perl -w use strict; print "Content-Type: text/html\n\n"; print exists $ENV{'MOD_PERL'} ? 'true' : 'false';
このようなスクリプトで確認できます。
trueが表示されれば、サーバー側の設定は終わりました。
次はスクリプトの設定です。
基本的な事として、編集の初期化に注意すること、実行パスはルートになることさえわかっていれば、特に問題はないでしょう。
自作のモジュールなどを利用している場合は、モジュールを読む前に、例えばドキュメントルートが/home/public_html/の場合は、
use lib '/home/public_html/';
ちなみに、BEGINではダメらしいです。
そして、
chdir '/home/public_html/';
このあたりを押さえておけば動くはずです。
Let’s mod_perl life!
Windowsではどうやるんだろう・・・orz