Mojolicious+mod_perl+CentOS5でつまづいたメモ(原因はhttpd.confだったけど)
Macでは上手くセッション持ち回ってたのに、
CentOSだと何故か動かないーって思ってたんだけど、
理由はPlack::Handler::Apache2が毎回コンパイルされている?ぽかったのが理由。
startup.plに設定を逃がして、PerlRequireすればちゃんと動いた。
いつも良く間違えている、
あたりまえな所でミスってた。。。
しかし、Macだとなぜ動いたんだろう。
ちょっとMac版のが賢かったってこと??
■Macでの設定(動作版)
・環境
Mac OS X 10.6.5
mod_perl: http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
$ httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: Jul 1 2010 17:16:33
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/usr"
-D SUEXEC_BIN="/usr/bin/suexec"
-D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/private/var/run/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"
・httpd.conf
StartServers 10
MinSpareServers 10
MaxSpareServers 10
ServerLimit 10
MaxClients 10
MaxRequestsPerChild 4000KeepAlive Off
# ServerName localhost
DocumentRoot "/var/www/hogehoge/trunk/web/public"
Options Includes ExecCGI SymLinksIfOwnerMatch
AllowOverride All
Order allow,deny
Allow from all
$ENV{PLACK_ENV} = 'production';
$ENV{MOJO_HOME} = '/var/www/hogehoge/trunk/web';
# for PSGI mode
use Plack::Handler::Apache2;
Plack::Handler::Apache2->preload("/var/www/hogehoge/trunk/web/script/hogehoge.psgi");
SetHandler perl-script
PerlHandler Plack::Handler::Apache2
# for PSGI mode
PerlSetVar psgi_app /var/www/hogehoge/trunk/web/script/hogehoge.psgi
・hogehoge.psgi
1 $ENV{MOJO_HOME} = '/var/www/hogehoge/trunk/web'; 2 3 use lib qw( 4 /var/www/hogehoge/trunk/web/lib 5 ); 6 use Mojo::Server::PSGI; 7 8 my $psgi = Mojo::Server::PSGI->new( 9 app_class => 'Hogehoge' 10 ); 11 12 my $app = sub { 13 return $psgi->run(@_); 14 };
・アクセス
http://localhost/tetetet
#=> ok
■ CentOSでの設定(動作版)
・環境
CentOS5
mod_perl: yum経由で入れた
root@AAAA hoge]# httpd -V
Server version: Apache/2.2.3
Server built: Aug 30 2010 12:28:40
Server's Module Magic Number: 20051115:3
Server loaded: APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
・httpd.conf
PerlRequire /etc/httpd/startup.pl NameVirtualHost *:8002 <VirtualHost *:8002> DocumentRoot "/var/www/hogehoge/trunk/web/public" <Directory "/var/www/hogehoge/trunk/web"> Options Includes ExecCGI SymLinksIfOwnerMatch AllowOverride All Order allow,deny Allow from all </Directory> # <Perl> # # for PSGI mode # use Plack::Handler::Apache2; # Plack::Handler::Apache2->preload("/var/www/hogehoge/trunk/web/script/hogehoge.psgi"); # # $ENV{PLACK_ENV} = 'production'; # $ENV{PERL5LIB} = '/var/www/hogehoge/trunk/web/lib'; # $ENV{MOJO_HOME} = '/var/www/hogehoge/trunk/web'; # </Perl> <Location /> SetHandler perl-script PerlHandler Plack::Handler::Apache2 # for PSGI mode PerlSetVar psgi_app /var/www/hogehoge/trunk/web/script/hogehoge.psgi </Location> </VirtualHost>
・startup.pl (chmod 755)
#!/usr/bin/perl # for PSGI mode use Plack::Handler::Apache2; Plack::Handler::Apache2->preload("/var/www/hogehoge/trunk/web/script/hogehoge.psgi"); $ENV{PLACK_ENV} = 'production'; $ENV{PERL5LIB} = '/var/www/hogehoge/trunk/web/lib'; $ENV{MOJO_HOME} = '/var/www/hogehoge/trunk/web';
・アクセス
http://localhost/tetetet
#=> ok
以上!