2004年7月 8日アーカイブ

と、言うわけで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');
    
    のように変更して見ましたが、コメントのポスト画面が再度表示されるだけで、うまく動かないようです。
これが解決できなかったので諦めました。
2004年7月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

このアーカイブについて

このページには、2004年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2004年7月 7日です。

次のアーカイブは2004年7月 9日です。

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

Powered by Movable Type 6.1.1