10分で完了、mod_perl 2.0 で Hello, World!
10分で、といいながらたぶん mod_perl と Apache2 をビルドするのに 10 分以上かかるという罠。まあいいや。以下のやり方で Linux、MacOSX どちらでもちゃんと動くと思われます。
まず、mod_perl 2.0 のインストール。DSO でもいいけど、ここでは Apache にスタティックに組み込みます。
$ wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz $ wget http://www.apache.org/dist/httpd/httpd-2.0.55.tar.gz $ tar zxvf mod_perl-2.0-current.tar.gz $ tar zxvf httpd-2.0.55.tar.gz $ cd mod_perl-2.0.2 $ perl Makefile.PL ? MP_USE_STATIC=1 ? MP_AP_PREFIX=../httpd-2.0.55 ? MP_AP_CONFIGURE="--prefix=/usr/local/httpd_mp2 --with-mpm=prefork" $ make $ make test $ sudo make install
mod_perl と Apache のコンパイルは一緒にやってくれるので、mod_perl、ウェブサーバー共にインストールはこれで完了。*1
次に、Apache の設定。highperformance.conf をコピーして書き換えます。
$ cd /usr/local/httpd_mp2/conf $ sudo cp httpd.conf httpd.conf.default $ sudo cp highperformance.conf httpd.conf $ sudo vi httpd.conf
内容の方は、こんな感じで。
Listen 80 ServerRoot /usr/local/httpd_mp2 DocumentRoot /usr/local/httpd_mp2/htdocs User nobody Group nobody MaxClients 150 StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestsPerChild 100 ErrorLog logs/error_log TransferLog logs/access_log HostnameLookups Off <Directory /> Options FollowSymLinks AllowOverride None </Directory>
次に、mod_perl の設定を追記します。
- localhost の 80 番にアクセスしたら Sandbox::Hello ハンドラが動くように。
- startup.pl の置き場所は適当に。
NameVirtualHost *:80 <VirtualHost *:80> ServerName powerbook.bloghackers.net:80 PerlModule mod_perl2 PerlRequire /Users/naoya/perlhacks/Apache2/startup.pl PerlModule Sandbox::Hello <Location /> SetHandler perl-script PerlResponseHandler Sandbox::Hello </Location> </VirtualHost>
conf で指定した場所に startup.pl を作ります。中では、とりあえずライブラリパスの設定をするだけ。アプリケーションが大きくなるにつれてこのファイルも育っていくことでしょう。
#!/usr/local/bin/perl use strict; use warnings; use lib qw (/Users/naoya/perlhacks/Apache2/lib); 1;
startup.pl で指定した lib ディレクトリの中に Sandbox/Hello.pm を作って、Hello, World! なコードを書く。
package Sandbox::Hello; use strict; use warnings; use Apache2::RequestRec; use Apache2::RequestIO; use Apache2::Const -compile => 'OK'; sub handler : method { my ($class, $r) = @_; $r->content_type('text/plain'); $r->print('Hello, World'); return Apache2::Const::OK; } 1;
これで apachectl start
して Apache を立ち上げる。http://localhost/ にアクセスして Hello, World! が出力されれば完了です。
Apache2::Request を使いたくなったら
$ sudo perl -MCPAN -e shell cpan> install ExtUtils::XSBuilder cpan> look Apache2::Request # perl Makefile.PL --with-apache2-apxs=/usr/local/httpd_mp2/bin/apxs # make # make test # make install
という感じでインストールして、httpd.conf に
LoadModule apreq_module modules/mod_apreq2.so
を追加します。
これで、
... use Apache2::Reqeust; ... sub handler : method { my ($class, $r) = @_; my $apr = Apache2::Request->new($r); my $mode = $apr->param('mode'); ... }
という具合にクエリパラメータが拾えるようになります。
Enjoy!
*1:バックスラッシュが ? になっちゃってます。読み替えてね。