MT4で「真の」Perl版ダイナミック・パブリッシングを実現するよ(ただしM専)
まず。MT 4.0でも多分動かないと思うのだけど、Boomerでもmt-view.cgiは動かない。MT::App::Viewerを見ると実装しかけで放置してあるように見える。見えない?
例によって動作するようにしてみた。以下はパッチ。
変更するファイルは、lib/MT/App/Viewer.pmのみ。MT4.0以降のバージョンなら適用可能なはず。なんせこのファイルはMT 4.0 beta6あたりから変更された形跡がない。
簡単な使い方
さて準備ができたところで、ブログのルートディレクトリに.htaccessを作って以下のように設定する。
Options -Indexes +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /MTDIR/mt-view.cgi?blog_id=X
</IfModule>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /MTDIR/mt-view.cgi?blog_id=X [L,QSA]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /MTDIR/mt-view.cgi?blog_id=X
ErrorDocument 403 /MTDIR/mt-view.cgi?blog_id=X
</IfModule>
要は、ダイナミックパブリッシングのときに生成される.htaccess中の「/BLOGDIR/mtview.php」を「/MTDIR/mt-view.cgi?blog_id=X」で置き換えたもの。XはそのブログのIDね。
試しに/BLOGDIR/の下にあるアーカイブファイルを一つ削除した上で、そのファイルを指すURLをブラウザでアクセスしてみるとよい。ページが表示されることが確認できるだろう。
…もっさりしてるけど。
あなたが「もっさりしてるけど我慢できなくはない。」という種類の人(M=もっさり好き)か「もっさりしてる。だがそれがいい!」という種類の人(ドM=ドが付くほどもっさり好き)の場合には、すっかりこの「真の」Perl版ダイナミック・パブリッシングに移行してしまってもいい。追加で以下の作業を行えばよいだけだ。
- Movable Typeで生成したアーカイブファイルを削除する
- CMSで「バックグラウンドのキューを使って再構築を行う」設定にする
おまけ
誤解はしようがないと思うけれども、Perl版ダイナミック・パブリッシング(MT4用) - The blog of H.Fujimotoや再構築なんてこわくない! (Junnama Online (Mirror))などのエフォートを軽視しているわけではない。これらはページ閲覧時にそのページを再構築して生成された実ファイルを一種のキャッシュとして使う。そのことはメリットとして謳っていい。だが、率直に言えば、MT::WeblogPublisherがアーカイブのレンダリングとファイルの生成を「モノリシックに実行すること」しかできないので、それを使う限りそうするしかなかったし、それがたまたま目的に合致していて都合がよかった、のだ。
これに対して、このエントリーで私が示したかったのは、MT::WeblogPublisherに依存することなく、アーカイブのレンダリングとファイルの生成を「分離できること」である。改造版のMT::App::Viewerは、blog_idとURIだけを入力として受け取り、対象のアーカイブをオンメモリでレンダリングし、その結果をas isでブラウザに対して出力する。キャッシュが必要ならばmod_cacheを使うかMT::App::Viewerをさらに改造して内部的にキャッシュすればよいし、ブラウザに出力する以外の目的で使いたければそう改造すればよい。
本当のところを言えば、MT::WeblogPublisherをリファクタリングして欲しい(したい)。とりあえずarchiverはexportできる。あとは依存性などを考慮してFileInfoの配列を返すメソッドと、FileInfoを食べてレンダリング結果を返すメソッド、レンダリング結果とFileInfoを食べてをステージングするメソッドに分けられないものかな。
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/581
Comments (0)