と、言うわけでMTをmod_perl2化を実現しようと、ソースをいじってみましたが、挫折しました。
mod_perl2を作ってる人は、なんでこんなにインターフェイスを大きく変えたんでしょうね~(泣)

一応途中までのやったことを書いておきます。
その前に参考URLは、mod_perl2のドキュメントのUser's guideの下のA Reference to mod_perl 1.0 to mod_perl 2.0 Migration. と言うドキュメントと、libapreq2のApache::Requestあたりです。

まず、httpd.confの設定ですが、
PerlSwitches -I/var/www/docs/cgi-bin/mt/lib -I/var/www/docs/cgi-bin/mt/extlib
PerlModule Apache2
PerlModule ModPerl::Registry
PerlModule Apache::DBI
<Directory "/var/www/docs/cgi-bin/mt">
  SetHandler perl-script
  PerlResponseHandler ModPerl::Registry
  Options +ExecCGI
  PerlOptions -ParseHeaders
</Directory>
みたいな感じです。
  • 環境変数PERL5LIBの変わりに、PerlSwitches -Iを使います。
  • PerlModule Apache2を追加します。
  • Apache::Registryの変わりに、ModPerl::Registryを使います。
  • PerlHandlerの変わりに、PerlResponseHandlerを使います。
  • PerlSendHeader Offの変わりに、PerlOptions -ParseHeadersを使います。
mod_perl2では、スクリプトが実行されるディレクトリがスクリプトのディレクトリではなくなってしまったので、$MT/*.cgiの先頭に以下を追加します。
chdir("/var/www/docs/cgi-bin/mt/");
# 上の例では、/var/www/docs/cgi-bin/mt にMTがインストールされています。

続いて、$MT/lib/MT/App.pmをmod_perl2に合わせて修正します。
  • 63行目付近
    $app->{apache}->send_http_header($type);
    
    $app->{apache}->content_type($type);
    
    に変更。
  • 183行目付近
    $class->fetch;
    
    $class->fetch($app->{apache});
    
    に変更。
  • 283行目付近
    $app->{apache}->status(Apache::Constants::REDIRECT());
    
    use Apache::Const -compile => qw(:common);
    $app->{apache}->status(Apache::REDIRECT);
    
    に変更。
  • 353行目付近
    my $tab = $q->parms;
    
    my $tab = $q->param;
    
    に変更。
で、はまったのが、
  • 209行目付近
    my $status = $q->parse;
    unless ($status == Apache::Constants::OK()) {
    
    ここで、$qはApache::Requestだと思うのですが、parseなんてAPIリファレンスに載ってません。リファレンスを読んだ感じだと、statusを呼べば良さそうなんですが、呼ぶとmod_perlが落ちてしまいます。
    さらに、Apache::Constants::OKもmod_perl2にはないので、ここも変える必要があります。
  • 445行目付近
    $ENV{MOD_PERL} ? $app->{apache}->connection->remote_ip : $ENV{REMOTE_ADDR};
    
    $ENV{MOD_PERL} ? $app->{apache}->connection->remote_addr->ip_get : $ENV{REMOTE_ADDR};
    
    に変更してみたのですが、Apache::Connectionのremote_addrなんて知らないよう!と言われてしまいます。
  • MT/lib/App/Comments.pm 30行目付近
    An error occurred: Usage: $table->get($key) at lib/MT/App/Comments.pm line 32.
    と言うエラーが出ました。APIリファレンスによると、$q->paramは引数が1個のバージョンしか載っていないようで、設定の方法がわかりません。
    とりあえず、
    $q->param('__mode', 'post');
    
    $q->param->set('__mode', 'post');
    
    のように変更して見ましたが、コメントのポスト画面が再度表示されるだけで、うまく動かないようです。
これが解決できなかったので諦めました。

カテゴリ

トラックバック(5)

このブログ記事を参照しているブログ一覧: MTのmod_perl2化

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/688

» Fedora core2へのmod_perl導入(一語/一区)~のトラックバック

処理が数倍早くなるという触れ込みのmod_perlを導入してみた。... 続きを読む

» MT の Apache2 + mod_perl2 化、成功?(ダメ出し日記)~のトラックバック
» MT4MP2 (MTモジュール)(der Mu[:]llkasten)~のトラックバック

テンプレートを弄ってて思ったのですが、画面切り替え時のもっさり動作がやはり気にな... 続きを読む

» MT の Apache2 + mod_perl2 化、成功?(ダメ出し日記)~のトラックバック
» MT の Apache2 + mod_perl2 化、成功?(ダメ出し日記)~のトラックバック

コメント(6)

とおな :

PerlModule Apache::compat
したらどうでしょうか?
compat.pm の中に、remote_addr というメソッドがあるようです。

fase :

コメントありがとうございます。
Apache::compatも試したと思うのですが、うまく行かなかったようです。
そもそも、APIリファレンスを読み直してみたら、remote_addrもremote_ipも載ってるんですよね~。
現在、2箇所で修正しつつテストを行っているのですが、片方ではremote_xxx関係ではエラーが出ていなかったりして・・・(汗)

fase :

remote_ipについてはわかりました。
httpd.confに、PerlModule Apache::portingを追加すると、mod_perl1からの変更点を指摘してくれるようになるのですが、それによると use Apache::Connection;を追加しろと出るので、追加したらその部分は通るようになりました。
しかし、$q->param(p1, p2)の部分は教えてくれません・・・。
こっちの方はmod_perl2ではなくて、libapreq2の方なので、portingは効かない模様。さらに、インストールされているのはlibapreq2-2.03で、読んでいたドキュメントはlibapreq2-2.04でした。
2.04では、移植の注意点として、paramに設定する場合にはこうしろってことが書いてあるのですが、2.03のドキュメントではsetはTODOとか書いてありました・・・。

とおな :

set は mod_perl2 と libapreq2 を cvs 版にすると使えるようになるとおもいます。
libapreq2 の cvs版は mod_perl2 のcvs版(1.99_15)に依存してるので注意です。

fase :

コメントありがとうございます。
cvs版にするのは、ちょっと面倒なのでもう少し待ってみることにします。

>mod_perl2では、スクリプトが実行されるディレクトリがスクリプトのディレクトリではなくなってしまったので、$MT/*.cgiの先頭に以下を追加します。
めんどくさいので作ってみました。
テスト環境がすくないので十分検証できてませんが
よかったらつかってみてください。

使用例:
PerlModule Apache::compat
PerlSwitches -wT

SetHandler perl-script
PerlHandler Apache2::chdir ModPerl::Registry
PerlOptions -ParseHeaders +GlobalRequest

コメントする

このブログ記事について

このページは、falseが2004年7月 8日 11:46に書いたブログ記事です。

ひとつ前のブログ記事は「subversion」です。

次のブログ記事は「vc-svn.el」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1