2005年08月06日

MacOSX の mod_perl は古い?

MacOSX には Apache が組み込まれているだけじゃなく PHP も入っていて httpd.conf のコメントを外すだけで利用できるのはわりと有名ですが、なにげに mod_perl も入ってます。

…ということを思い出して、さっそく使ってみようとおもったらハマりました。

有効にする手順は簡単で、 ターミナル.app で sudo vi /etc/httpd/httpd.conf するか、Finderから[移動]→[フォルダへ移動]で /etc/httpd/、httpd.conf のコンテキストメニュー、所有権でオーナーを自分にして開きます。

# 238行目あたり、コメントを外す
LoadModule perl_module        libexec/httpd/libperl.so

# 281行目あたり、コメントを外す
AddModule mod_perl.c

# てきとうなところ(412行目あたりに)以下を追加
<IfModule mod_perl.c>
        <FilesMatch "\.pl$">
             SetHandler perl-script
             PerlHandler Apache::Registry
             Options +ExecCGI
             PerlSendHeader On
        </FilesMatch>
</IfModule>

上記のようにすると場所に関係なく拡張子.plに mod_perl パワーが効くと。保存して閉じ、システム環境設定 共有のパーソナルWeb共有の再起動。

#!/usr/bin/perl

use Data::Dumper;
print "Content-type:text/html\n\n";
print "<pre>Hello! by perl $]\n";
print Dumper \%ENV;

テストとして、以下のようなファイルを test.pl とかでウェブディレクトリ(変えていなければ /Library/WebServer/Documents/ )に保存。実行権を与える(chmod 755 /Library/WebServer/Documents/test.pl)。

http://localhost/test.pl にアクセスしてみる。しかし!非情にも「Safari はこの場所のデータを読み込めませんでした」。

ふむ。うーん、mod_perl 的におかしいのか?とか、エラーログみても何も出てないし、うーんうーん。telnet で見てみると、ほんとに何も吐き出されていません。

$ telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /test.pl HTTP/1.1
Host:localhost

Connection closed by foreign host.

おもしろいことに、エラー出力はできて、tail -f /var/log/httpd/error_log して

use Data::Dumper;
print STDERR "<pre>Hello! by perl $]\n";
print STDERR Dumper \%ENV;

すればターミナルで閲覧できます。
ま、いっかこれで。って、よくないよ

いろいろ調べたところ、利用しているperlが古いと mod_perl で print() が使えず(正確には、STDOUT が使えない)、

$r = Apache->request;
$r->print(Dumper \%ENV);

とかしないといけないらしい。MacOSは10.3.9で、さきほどのエラーログを利用した出力で確認したバージョンは 5.008001、'MOD_PERL' => 'mod_perl/1.26'。1.26。1.26って古いってことなのかな。

まあいいよ。Apache は mod_so が使え簡単なので mod_perl を入れ直し。http://perl.apache.org/dist/mod_perl-1.0-current.tar.gz をDL。

$ tar zxvf mod_perl-1.0-current.tar.gz
$ cd mod_perl-1.29
$ perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/bin/apxs EVERYTHING=1
$ make && make test && sudo make install

これでApache再起動。あっさり解決。

Hello! by perl 5.008001
$VAR1 = {
          'MOD_PERL' => 'mod_perl/1.29',
                  (省略)
        };

アップル、PHPはマメにUPしてくるくせに、mod_perl は古いまま?(ボソっ)


TrackBack

Comments

コメントをどうぞ


冨田尚樹
Naoki Tomita
loading from twitter
たぶん人気なもの
del.icio.us/scrap
今日のCPANモジュール
とみた広報
Syndicate this site
Syndicate this site
あわせて読みたい なかのひと