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