2007年9月 6日

続: MT4 + mod_perl2

8/28にここで書いたこと間違いだらけ.
そもそも, MT4はマルチスレッドなMPMを使用しているApache2上ではうごかない.

mod_perl2は, マルチスレッドMPM下では, カレントディレクトリが
実行対象のファイルのあるディレクトリにならないから, なんとかして
やらなければいけない.
PerlFixupHandlerディレクティブ内で, chdirしてやる手法がある.
<Directory "/path-to/mt">
<Files ~ "mt(?!-config).*\.cgi$">
SetHandler perl-script
</Files>
PerlResponseHandler ModPerl::Registry
Options -Indexes ExecCGI
PerlSendHeader On

PerlFixupHandler "sub { \
chdir('/path-to/mt/'); \
return OK; \
}"
PerlSetEnv MOD_PERL 0
</Directory>

が, そもそもマルチスレッドMPM下では, 要求を処理するスレッドが
変更になり, 結局, カレントディレクトリがおかしくなる.

prefork MPM下ではその問題が出ないので,
PerlResponseHandler ModPerl::Registry
PerlResponseHandler ModPerl::PerlRun
ディレクティブの代わりに,
PerlResponseHandler ModPerl::RegistryPrefork
PerlResponseHandler ModPerl::PerlRunPrefork
を使用してやれば, カレントディレクトリが実行対象ファイルのある
ディレクトリになり, ちゃんと動くようになる.

先だっての記事で動いているように見えたのは, 正規表現の書き方が
間違っていて, mod_perl下で動いていなかったから.
<Files ~ "mt(?!-config).*\.cgi$">
であれば, mod_perl下で動くようになる.
でもうちのは, worker_mpmなのでNG

コメントする