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 4000

KeepAlive 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



以上!