どうやら、今度こそ、上手く行ったようなので未だに自信なさげながらも本気でまとめます。
主題は、「Perl版ダイナミック・パブリッシングを使っていて、携帯からの投稿時や日時指定更新時に上手く最新の記事が更新表示されない」ケースへの対応策です。
お盆休みの大阪帰省中、実は携帯からアレコレ更新しようと思っておったのですが、MTmailから何度送信しても、挙句にubicast Mail Bloggerから送信しても、全く更新ができないという事態に直面したのでした。エラーメールが返ってくる訳でも無いので当初はMTmail側のトラブルを疑ったのですが、ubicast Mail Bloggerからでもダメとなると小生が何かやっちゃったっぽいです。心当たりと言えば、先日、ダイナミックパブリシングに切り替えて以降、日時指定での更新時や、携帯からの更新時にキャッシュが上手くクリアされない問題が発生し「XMLRPCServer.pm」をガチャガチャと弄ったのが原因でしょうか。とまぁ、旅行中は軽くガッカリだったのですが、また新しい課題というか難題というか、夏休みの宿題っぽい事態が発生したわけであります。
「XMLRPCServer.pm」の何を弄ったのかと申しますと。上記の問題を解消するべく調べた中で、お世話になっているThe blog of H.Fujimoto様のPerl版ダイナミック・パブリッシング(MT4用)のページの中で、コメント部分にてこんなやり取りが記録されていたのであります。
No.21 yuha : (無題)
[返信] [引用して返信]いつもお世話様です。
Perl版ダイナミック・パブリッシングを何とか導入させていただきました。この状態でモブログすべくMTmailを使用してエントリを投稿したところ、管理画面のブログ記事の一覧には正常に現れるのですが、全然サイトに反映されませんでした。管理画面で手動でサイトの再構築をしても改善せず、試行錯誤した結果、プラグインの設定のところからキャッシュをクリアしたところ表示されるようになりました。この現象を回避する方法はないもんでしょうか。
2007年12月25日 23:51
おおー、これはまさに小生も直面した課題。この時は結局諦め気味に、キャッシュを使用しない設定にしてアクセスされる度にページを生成させるようにしたのでありました。これに対する開発者の壱様のお答えがコチラ
No.22 壱 Author Profile Page: Re:MTMailの件
[返信] [引用して返信]>yuhaさん
こんにちは。ご質問の件ですが、おそらくMT/lib/XMLRPCServer.pmを書き換えれば動作するようになると思います。
MT4.01だと、上記ファイルの250行目に「$entry->save;」という文があります。この後に、以下の2行を追加してみてください。$blog->touch;
$blog->save;
2007年12月26日 00:01
キタ━━━━(゚∀゚)━━━━ッ!!
早速該当のファイルを見てみることにします。若干上記のパスとは異なりますが、「(MTインストールディレクトリ)/lib/MT/XMLRPCServer.pm」
を発見して開いてみたところ...あり?250行目付近に「$entry->save;」ってのはありませんですナァ。小生のバージョンがMT4.1で、コメントにある「MT4.01」と若干違うからでしょうか。代わりに370行目付近にて「$entry->save;」を発見しました。何かもう一つ、480行目付近にも同じく「$entry->save;」があるのが気になりますが、とりあえず前者の後ろに
$blog->touch;
$blog->save;
を追加して、日時指定投稿のテストしてみました。再度キャッシュの使用をonにしてレッツ・テスト日時指定更新...効果ナッシング。キャッシュがクリアされません。じゃぁ後者側だけに追加した場合は?⇒やっぱダメですか。んじゃ両方ダ!⇒え、ダメなの?...ここで諦めて、キャッシュ機能をoffに戻し、放置していたのが拙かったようで。
結論から言うと、上記の後者側に
$blog->touch;
$blog->save;
を追加してしまうと、携帯からの更新が出来なくなってしまうっぽいです。ヌガー。
上記の前者側、すなわちMT4.1の場合は370行目付近にある「$entry->save;」の後ろに
$blog->touch;
$blog->save;
を追加することで、どうやら携帯からの投稿時には上手くキャッシュがクリアされるっぽいことが先ほどのテストで改めて確認できました。残るは、日時指定更新時にキャッシュが上手くクリアされない問題です。実はもう一つ「XMLRPCServer.pm」が存在しておりまして、「(MTインストールディレクトリ)/addons/Commercial.pack/lib/CustomFields/XMLRPCServer.pm」
という全く別のところに、同じ名前のファイルが存在するのであります。これの中の、「$entry->save or die MT::XMLRPCServer::_fault($entry->errstr);」の後ろにも、
$blog->touch;
$blog->save;
を追加してやると、日時指定更新の際にも、キャッシュがちゃんとクリアされる...と思います。
【まとめ】
MT4.1にてPerl版ダイナミック・パブリッシングを使用し、キャッシュ機能をonにした際1. MTmailなどを使い携帯から更新しようとするとエントリー自身は正常に登録されるがキャッシュが上手くクリアされず、しばらく投稿した記事が表示されない。
(MTインストールディレクトリ)/lib/MT/XMLRPCServer.pm
上記370行目付近の「$entry->save;」直下に
$blog->touch;
$blog->save;
を追加する。480行目付近の「$entry->save;」には追加しちゃダメ。
2.日時指定更新をした際にエントリー自身は正常に登録されるがキャッシュが上手くクリアされず、しばらく投稿した記事が表示されない。
(MTインストールディレクトリ)/addons/Commercial.pack/lib/CustomFields/XMLRPCServer.pm
上記70行目付近の「$entry->save or die MT::XMLRPCServer::_fault($entry->errstr);」直下に
$blog->touch;
$blog->save;
を追加する。(2008/08/22追記 ここから)
失礼しました、上記2番目は小生の勘違いのようであります。上記を適用するとMTのログにエラーが出ておりました。修正前の状態に戻して日時指定投稿してみたところ、問題なくキャッシュはクリアされておりましたので、上記1番目の修正のみで解決するようです。お騒がせしました。
(2008/08/22追記 ここまで)
なお、「(MTインストールディレクトリ)/addons/Commercial.pack/lib/CustomFields/XMLRPCServer.pm」にはバグがあり、日時指定投稿したりした記事の投稿時刻が9時間ズレてしまうという物がございます。16行目の「my ($cb, $mt, $entry, $original) = @_;」を「my ($mt, $entry, $original) = @_;」と直すことで解決するとの事ですので併せて対応するのがヨロシイかと。こちらの詳細はjm@foo様のこちらの記事をご覧ください。
って、時代はもうMT4.2に突入しているので何を今更な話かも知れませんが、お役に立てれば幸いです。この件に関しましては長期間に渡って長々と書き連ねましたことをお詫び申し上げます。







