そもそも, 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
0 件のコメント:
新しいコメントは書き込めません。