mod_perl 実装完了

最近、エントリーの数が多くなり、BLOG 再構築時に必ずといっていいほど「Connection Timed Out」してました。というのもサーバが AMD-K6 400MHz という、2世代くらい前の CPUを使っているので無理もありません。このくらいのスペックだと Perl の処理が追い使ず、Movable Type のような Perl が Perl を呼ぶようなプロセスだと、あっという間に CPU 負荷 100%に達してしまいます。WEB上でタイムアウトしても裏では Perl が処理を最後までやってくれるので、実質再構築に問題はありませんでしたが、いかんせん使いづらいです。

そんなわけで、サーバ管理者に相談をしたところ mod_perl の実装をしてもらいました。(管理者様:徹夜で作業して頂きまして本当にありがとうございました。)mod_perl は perl を Apache(WEBサーバ) のモジュールとして組み込みます。Apache::Registry のキャッシュ効果で perl 処理の高速化に有効な手段とされています。
実際の作業はサーバ管理者にやってもらいましたので詳細の手順は割愛しますが、mod_perl のインストールに参考になるサイトは検索すればいっぱい見つかります。たとえば、MovableType を mod_perl (Apache::Registry) 環境下で動かす方法 など。

(更新作業中にWEBの表示が乱れていることがありました。お詫び申し上げます。)

●インストールメモ

mod_perl のインストール後、Movable Type に適応させるには httpd.conf に設定が必要なのですが、.htaccess が許可されている場合は .htaccess で設定することが出来ます。個人サーバではない場合、このようなユニークな定義は .htaccess で個別に設定するのがベターかと。

/***/mt/.htaccess はこんな感じ。

PerlSetEnv PERL5LIB /***/mt/lib:/***/mt/extlib
PerlModule Apache::Registry
<Files *.cgi>
SetHandler perl-script
</Files>
PerlHandler Apache::Registry
PerlSendHeader Off

<Files mt.cfg>
<Limit GET>
deny from all
<Limit>
</Files>

安全上 mt.cfg へのアクセスは拒否してます。場合によっては
Option +ExecCGI
なども必要かと。ちなみに .htaccess は httpd.conf で
AllowOverride All
が定義されているか、使用するキーワード(FileInfo Limitなど)が有効になっていないと内部エラーが返されますのでご注意を。

mod_perl が効いているかどうかは、ApacheAuth in University の mod_perl_test.txt をダウンロードしてチェックするのが簡単です。詳細な動作確認をしたい場合は .htaccess に PerlHandler Apache::Status と記述してディレクトリにアクセスすれば、読み込まれているモジュールなどが確認出来ます。(Apache::Request や Apache::Cookie が正常にインストール出来たかの確認にも使える)

これでほぼ正常に動くのですが、インデックスの更新時に

エラーが発生しました:

Can't locate loadable object for module DateTime in @INC
(@INC contains: /usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1
/usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1
/usr/share/perl/5.6.1 /usr/local/lib/site_perl . /etc/apache/
/etc/apache/lib/perl /home/suzuki/public_html/cgi-bin/mt/lib
/home/suzuki/public_html/cgi-bin/mt/extlib)
at /home/suzuki/public_html/cgi-bin/mt/extlib/DateTime.pm line 44
BEGIN failed--compilation aborted
at /home/suzuki/public_html/cgi-bin/mt/extlib/DateTime.pm line 44.
Compilation failed in require
at /home/suzuki/public_html/cgi-bin/mt/lib/MT/Template/Context.pm line 1467.

と表示されてしまい、更新が停止してしまいました。
のまのしわざ: MT3.11-jaのmod_perl化メモ

uep on hayate: mod_perl化

mega green oasis +: Movable Type 3.121-ja の mod_perl 環境でエラー
などを調べたところ、Atomフィードの $MTEntryModifiedDate utc="1" というタグが関係しているようです。そんでもって DateTime::TimeZone をインストールしてごにょごにょ設定すれば使えるみたいなんですが、これ以上サーバ管理者様に負担をかけるのが申し訳ないので、Atom フィールドを使用しない設定に変更。っていうか Atom フィールドそのものがよくわかってないんですけどね。なんか XML がどうのこうのっていうのらしいです。

テンプレートから 「Atomフィールド」を削除し、インデックステンプレートやアーカイブテンプレートから

<link rel="alternate" type="application/atom+xml" title="Atom" href="<$MTBlogURL$>atom.xml" />
のタグを削除。とりあえずこれでエラーは消えました。

mod_perl 導入でだいぶ軽くなったんですが、実はこのサーバ、メモリがたった128MByte しかなく mod_perl(Apache::Registry) のようにキャッシュをばんばん使う使い方だとえらいスワップしてしまい、結局あまり効果があがらないというのが実情で…。(管理者様ごめんなさい)

はやく新しいサーバが欲しい…。



投稿者:mimiham : 2005年03月05日 23:25 : MT

トラックバック

このエントリーのトラックバックURL:
http://mono-zukuri.net/cgi-bin/mt/mt-tb.cgi/128

このリストは、次のエントリーを参照しています: mod_perl 実装完了:

» mod_perlのインストール
from The-Photograph.net

どうもブログの更新で 遅いのが気になったので ... [続きを読む]
トラックバック時刻: 2005年03月31日 01:09