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