2005年06月02日

mod_perl 2.0

mod_perlのバージョンアップをしてみた。 1.999_17 -> 2.000_00
つかってたバージョンはRC4ってやつだ。RCと言いながら、リリースされた 2.000_00 と大分仕様がちがっていて腹がたちました。詳細は以下。
mod_perl: mod_perl 2.0 renaming
この変更はどうやら 1.999_22 でおこなわれたっぽい。苦労したわりにはそれほど恩恵があるわけでもないんだけど、今つかってるバージョンがどうも不安定で、安定性があがっていれば良いのだけれど、どうだろうな。これは。とにかくRCと言われていたバージョンと比べると変更が大きくってリリース版とは思えません。

今まで運用してて側からの変更ポイントとしては、

o apache の 2.0.54でビルドできるようになった。

o インストール前に libDir/Apache2.pm と libDir/Apache2/ を削除、ないし移動する必要がある。

o 名前空間の上書きをする必要がなくなったので、 install option の MP_INST_APACHE2が消えた。

o 名前空間を上書く、Apache2.pm が削除された。
必ずuse Apache2;することになってたからコード修正しないとエラる。インストール後にダミーで置いておくと良いかも。とりあえずコードから削除。

o CGI.pm 等、名前空間変更による影響を受けるモジュールはバージョンアップする必要 がある。 perl -MCPAN -e 'install Bundle::Apache2' でひととおり入るみたい。

o libapreq は最新バージョン(2.05-dev)にする必要がある。

o mod_apreq.so のファイル名が mod_apreq2.so に。

o Apache2::Request::param で set / add できない。
APR::Request::Param::Table とかいう、APR::Tableのインスタンスとおもわれるもの にadd だとか、set だとかいうメソッドが存在してくれません。Documentには使えるっ て書いてあるのに!set はどうだったかしらないが、add は今まで動いてた。
よって、param(key => val); がつかえないので、オーバーライドしたClassの object にアクセサをつくってやって、そこから出しいれするむなしい対策をすることに。

o Apache->request() って良くつかうフレーズは Apache2::RequestUtil->request() に変更。

o r->env->status は、 r->status に。(結局1.x系の仕様)
参考まで、インストールスクリプトと、Apache2::Requestのラッパー


#!/bin/sh

HTTPD_VERSION=2.0.54
MODPERL_VERSION=2.0.0
LIBAPREQ_VERSION=2.05-dev

PREFIX=/usr/local/perld
PROGRAM_NAME=perld


HTTPD_SRC_URL="http://www.apache.org/dist/httpd/httpd-$HTTPD_VERSION.tar.gz"
HTTPD_SRC_URL="http://archive.apache.org/dist/httpd/httpd-$HTTPD_VERSION.tar.gz"
MODPERL_SRC_URL="http://perl.apache.org/dist/mod_perl-$MODPERL_VERSION.tar.gz"
LIBAPREQ_SRC_URL="http://www.apache.org/dist/httpd/libapreq/libapreq2-$LIBAPREQ_VERSION.tar.gz"

DOWNLOAD_CMD="wget"

$DOWNLOAD_CMD $HTTPD_SRC_URL
$DOWNLOAD_CMD $MODPERL_SRC_URL
$DOWNLOAD_CMD $LIBAPREQ_SRC_URL
###

tar zxvf httpd-$HTTPD_VERSION.tar.gz
tar zxvf mod_perl-$MODPERL_VERSION.tar.gz
tar zxvf libapreq2-$LIBAPREQ_VERSION.tar.gz

cd mod_perl-$MODPERL_VERSION
perl Makefile.PL \
MP_AP_PREFIX=../httpd-$HTTPD_VERSION/ \
MP_USE_STATIC=1 \
MP_AP_CONFIGURE="--prefix=$PREFIX --enable-suexec \
--enable-mods-shared=all --with-mpm=prefork \
--with-program-name=$PROGRAM_NAME"
make
sudo make install

sudo ln -s $PREFIX/bin/$PROGRAM_NAME $PREFIX/bin/httpd
sudo ln -s $PREFIX/bin/apachectl $PREFIX/bin/$PROGRAM_NAMEctl

cd ../libapreq2-$LIBAPREQ_VERSION
perl Makefile.PL --with-apache2-apxs=$PREFIX/bin/apxs
make
sudo make install




package Apache2::RequestSubclass;
use Apache2::Request;
use Apache2::Upload;

our @ISA = qw(Apache2::Request);

sub new {
my($class, @args) = @_;
my $r = shift @args;
#push @args, "POST_MAX","1M";
my $self = bless { r => Apache2::Request->new($r,@args), _my_table => '' }, $class;
my %table;
for my $key ($self->{r}->param) {
my @ret = $self->{r}->param($key);
$table{$key} = scalar @ret > 1 ? [@ret] : $ret[0];
}
$self->{_my_table} = \%table;
return $self;
}

sub param {
my $self = shift;
my ($key,$val) = @_;

my $table = $self->{_my_table};

unless ($key) {
return keys %{$table};
}

if (defined $val) {
$table->{$key} = $val;
$self->{_my_table} = $table;
}
my $ret = $table->{$key};
if (ref $ret eq 'ARRAY') {
return wantarray ? @$ret : $ret->[0];
} else {
return $ret;
}
}
1;
posted by とおな at 07:26| 東京 🌁| Comment(0) | TrackBack(2) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

Sledge mod_perl2 Apache2::Request対応
Excerpt: Sledge Apache2 mod_perl2 対応を見てmod_perl2で...
Weblog: Lost-Season
Tracked: 2005-06-14 23:18

MovableType 2.661をapache2+mod_perl2で動作させる
Excerpt: リクエストを戴きましたので、MovableType 2.661(以下MT 2.661)をapache2+mod_perl2上で動作させるまでに行った記録を記しておこうと思います。おそらく相当ニッチな要..
Weblog: Fenrir's BLog
Tracked: 2008-05-09 11:09
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。