トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-wiki/255

ページの作成や編集にはユーザ登録が必要です。

setup.datが見つからないとのエラーが出る。

  • 投稿者: South
  • カテゴリ: 本体
  • 優先度: 重要
  • 状態: リリース済
  • 日時: 2005年10月04日 20時23分49秒

 内容

Redhat9 で Apache2.0.54 + mod_perl2.0.1 という環境で使用しています。時折、lib/Wiki.pm で setup.dat が見つからないというエラーが出ていました。mod_perl2ではカレントディレクトリが不定になると聞いたので、wiki.cgi の BEGIN ブロックの外で、もう一度

if(exists $ENV{MOD_PERL}){
       # カレントディレクトリの変更
       $ENV{FSWIKI_HOME} = '/hoge/fswiki/';
       chdir($ENV{FSWIKI_HOME});
}

と記述したところ、今のところ正常に動作しているようです。mod_perlに詳しくないのですが BEGINブロックでchdirするだけではだめなんですかね??

 コメント

  • Apache2系のmod_perlのバグ(仕様?)ですね - sakuma (2006年03月16日 00時23分32秒)
  • バグではなく仕様ですネ - まこと (2006年06月19日 18時43分33秒)
  • 対策はapacheの再起動だけですか? - 名無しさん (2006年06月20日 08時00分18秒)
  • 対応策いろいろ - まこと (2006年06月21日 18時45分頃)

ModPerl1.99以上のバージョンでは、プログラムを呼び出す際にchdirをしてくれません。

現在リリースされてるFSWikiの対応だとBEGINブロックでchdirしてますがこれだと、初めてロードした時にしか実行されないのでロード後に他のプログラムがchdirし再度wiki.cgiが呼び出されるとカレントディレクトリが変更されているので読めなくなってるのかと思います。

MPMがworkerの場合(threadベースの場合)、chdirが使えませんので全てフルパスにして対応するしかないと思います。(chdirが使えたとしても危険ですので使わないほうがいいです。)

Preforkの場合(プロセスベースの場合)ですがmod_perlのバージョンが2.0以上であればModPerl::Registryの変わりにModPerl::RegistryPreforkを使うことで解決するはずです。

mod_perlのバージョンが1.99系の場合はhttp://www.cpan.jp/upload/Apache2-chdir.tar.gzを使うと解決できます。(他にも方法があるかも?)

(環境によってApache::Constの使い方が違うので動かない場合があります。)

参照:http://perl.apache.org/docs/2.0/user/porting/compat.html#C_Apache__Registry___C_Apache__PerlRun__and_Friends

  • cvsにはすでに取り込まれていましたね。ステータスを完了に変更します。 - typer (2007年07月08日 23時28分12秒)
  • 3.6.3dev2でリリースしました。 - たけぞう (2007年09月22日 17時07分54秒)
お名前: コメント:

最終更新時間:2007年09月22日 17時07分54秒