Jul 3, 2007

RebuildQueue二題

RebuildQueue - mtplugins - Trac (Tracサイト。しょっちゅう落ちているので読めないことが多い。)
RebuildQueue README.txt

RebuildQueueは非常に便利なツールなのだが、(1) 英語でしかほとんど情報がない上Tracサイトもなかなかアクセスできず、(2) コマンドラインまたはcronで実行する必要があるという制約がある、せいかあまり使っているという話は身近に聞かない。

簡単に言うと、Movable Typeの再構築を2フェーズで行うツールである。第一フェーズは再構築するファイルとそのスペシフィケーションをリストしてデータベースに格納しておき、第二フェーズではその情報を使って実際の再構築を行う。つまり、MTのCMSで編集を行ったり、コメント・トラックバックを受信したりした場合には第一フェーズだけを実行し、第二フェーズはcronやデーモンを使って別プロセスで実行する。

肝は、

  1. 第一フェーズが軽量であること
  2. 第二フェーズは任意の時点で別プロセスで実行できること
  3. 第二フェーズは分散した複数のサーバで並列に実行できるのでより高速に再構築できること

である。3.に必要な実行環境を用意できる人は必ずしも多くないので効用は割り引いて考えなければならない。

で、ここからが本題。

本題一つ目。RebuildQueueはMovable Type 3.3以降で使えるが、4.0では使えない。Pronet MLで聞いたところによれば、RebuildQueueはコア機能に組み込まれる予定のようだ。beta4には組み込まれていないので本当のところどうなるのかは分からない。このあたりの事情をスルーして3.3でも4.0でも使えるようにしたRebuildQueueをでっち上げたので下においておく。

RebuildQueue-MT4

MT4ではMT::WeblogPublisherが大幅にrewriteされてリファクタリングされているので、MT4用にRebuildQueueを拡張するのは簡単な作業だった(ベンチマークをとっていないがおそらくMT3用のコードより高速なはず)。オリジナルとの差分はこれくらい(r383 - ogawa - Google Code)で済んでしまう。

本題二つ目。RebuildQueueの第二フェーズはcronやデーモンを使って別プロセスで実行する必要があると書いたが、実はちょっと工夫するとcronなどが使えない環境でも利用できる。

RebuildQueueRunner

RebuildQueueRunnerは、RebuildQueueの第一フェーズが実行されたタイミングでバックグラウンドプロセスを起動して第二フェーズを実行するプラグインである。第一フェーズが実行されるたびにバックグラウンドプロセスが起動されるのでは具合が悪いので、MT3.3が備えているタスクマネージャ機能を使って5分間に高々1個のバックグラウンドプロセスしか実行しないようにしてある。

RebuildQueueとRebuildQueueRunnerの組み合わせによって実現される機能は、実はJunnamaさんとこの

MovableType Background Rebuilder Plugin(1.0RC2)(1.0RC1). (Junnama Online (Mirror))

にかなり近い。私の実装の方が簡単で、MT4にRebuildQueueが組み込まれた場合にも容易に対応できるというメリットがあるが、Junnamaさんの実装の方が再構築の単位が細やかになっている。

RebuildQueue-MT4RebuildQueueRunnerとももう少し時間を割いてドキュメントを書きたいところなのだが時間がない。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com