2.661)をapache2+mod_perl2上で動作させるまでに行った記録を記しておこうと思います。ニッチな要望だと思いますが(笑)。2.661は自分の使い勝手がいいようにかなり改造を施してしまったので、なかなか最新バージョンに移ろうという気になれないでいました。mod_perl1.3環境から卒業してapache2+mod_perl2に対応する必要がてできました。2.661を使い続けたい、だから移植しよう、というのがこの記事の動機となっています。apache1.3+mod_per1.3からapache2+mod_perl2にl変更するにあたってポイントとなる点は大きく2つに大別できると思います。1つはapache2では並行動作のモードが複雑になった(従来のprefork動作以外にもmulti-thread動作等が選べる)ため、その上で動くmod_perl2がスクリプトを起動方法が変更になったようです。スクリプトを書く側にとって深刻な点は、起動時のディレクトリが必ずしもスクリプトの存在するディレクトリにならないことです。2.661では動作に必要となるサブモジュールの位置を、スクリプトが存在するディレクトリからの相対パスで求めているため、これは非常に大きな問題となります。先達はchdirでなんとか解決しようとされたり、apache2の構成方法にもよりますが従来どおりの動作が期待されるPrefork版のPerlハンドラを渡して解決しようとされたりしています(chdirが好ましくないことやPrefork版モジュールは本家mod_perl2のサイトで言及されています)。一つの問題はmod_perl2でAPIの名前や動作がかなり変更されたことです。名前が変更されたことは書き換えで対応すればよいようで、これも先達によって『MT3.3をmod_perl2で動かすpatch(その1)』等で書き換え方法が公開されています。1.X』参照)のが響いています。2.661を動作するようにしました。変更点をまとめたdiffファイル(patchコマンドで適用可能形式)を公開するとともに、apache2+mod_perl2側の設定を以下に示します。all</Location>1つ目の問題点、実行時のディレクトリの問題については環境変数渡し+@INCをスクリプト内で変更することでサブモジュールを見えるようにしました。@INCの変更はBEGINブロックで対応しないようにしましたが、これは『[perl]ModPerl::{PerlRun,Registry,RegistryPrefork}でのカレントディレクトリ、BEGINブロック、@INCの扱いメモ』に基づいています。等を使った解決方法が考えられると思います。2つ目の問題点は、先達の書き換え方法、並びにApache2::Requestに対して、paramが書き換え可能なApache2::RequestSubclassというラッパークラスを定義することで対応しました。できない』より戴きました。問題点がでてきたら変更を考えていますが、以上の作業で現在のところ問題なく動作しています。※ファイルのアップロードでこけることがありました。upload_fh)になっていたようです。対して適用してください。No匿名でのコメントは受け付けておりません。名前(ハンドル名可)とメールアドレスは必ず入力してください。メールアドレスを表示されたくないときはURLも必ず記入してください。コメント欄でHTMLタグは使用できません。コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。BlogPeople。