LaunchBackgroundTasks(Movable Type)の挙動。

| コメント(0) | トラックバック(0)

mt-config.cgiに LaunchBackgroundTasks 1と指定すると、エントリーを保存する際の再構築処理がバックグラウンドで行われるようになる。(正直知らなかった。何せユーザー歴がまだ半年なので...)。

Movable Type Background Rebuilder Plugin(1.0RC2)でも同じようにエントリーの保存時に再構築処理をバックグラウンドで行っている。思いっきり車輪の再発明...かと思って試していたら、この間自分がつまづいたところと同じところでご本家さんもつまづいてるようだ(同じ事象が発生する)。ということで以下の問題があるようなのでご注意を。

問題はエントリーのカテゴリー変更時に起こる。

エントリーアーカイブのアーカイブマッピングにカテゴリーのbasenameが含まれている時(例:%-c/%f)に、エントリーのプライマリーカテゴリーを変更すると保存場所も変わるのが正しい振る舞いなのだが、LaunchBackgroundTasks 1を指定しているとカテゴリー変更前の保存場所に保存されてしまう

※もう一度保存し直すと正しい場所に保存される。

また、このブログのようにエントリーカテゴリーをエントリーのページに表示させている場合(エントリーの右下あたり)はカテゴリー名も変更前の古いままになってしまう。

※何故か「複数のカテゴリーを指定」している場合には発生しない。

実はBackground Rebuilder Plugin を書いている時にも同じ現象が発生した。
CMSPreSave_entry, CMSPostSave.entry のタイミングで $entry->permalinkや$entry->categoryを取得しようとしても古いパスやカテゴリーが帰ってきてしまう。$entry->title等は正常に取得できる。

MT::Placementを保存した後でもうまく反映されなかった。$entry->permalinkや$entry->categoryはmt_entryテーブルの項目ではなくメソッドなのでCMSPreSave_entryやCMSPostSave.entryコールバックが呼ばれるタイミングでは既に元のentryのcategory情報や保存先を指定してしまった後だからなんだろうか(未確認)。

結局 Background Rebuilder Plugin では「カテゴリー情報が変わっていたら旧ファイル削除(CMSPreSave_entry)→カテゴリー情報保存→(必要なら)トラックバック送信(CMSPostSave.entry)→保存結果表示テンプレートが呼び出された(MT::App::CMS::AppTemplateSource.edit_entry)」タイミングで再構築を実行、というように修正して解決した。

LaunchBackgroundTasks 1 を指定している方はエントリーのカテゴリー情報変更→保存の際にはご注意を。


Background Rebuilder Plugin では、この問題と旧ファイルが残ってしまう問題を解決しています。

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/362

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2007年5月 4日 05:44に書いたブログ記事です。

ひとつ前のブログ記事は「Movable Type用ファイルマネージャーの設計と実装(1)。」です。

次のブログ記事は「Movable Typeで項目の並べ替えとかハンドラの上書きとかモードのつくり方とか。」です。

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

Powered by Movable Type 6.2.6