Windows Live Writer で Movable Type に投稿すると時刻がずれるらしい
Windows Live Writerで時間が9時間ずれる件について(続編)
Windows Live Writerで時間が9時間ずれる件について(続々編)
Windows Live Writerで投稿すると9時間ずれる件について(恥編)
とお送りしてきたMovable Typeと格闘シリーズ。紆余曲折ありましたが、とうとう原因を突き止めました。もうこうなったらプロの意地というか、原因突き止めるまでは諦めへんで!って感じで、ここんとこ、夜も朝もMovable Typeのスクリプトと格闘。結局、最初はWindows Live Writerをかなり疑ってたけど、Movable Typeが悪かったっつーことで。
で、原因はココ。addons/Commercial.pack/lib/CustomFields/XMLRPCServer.pmの中、15行目。
sub APIPostSave_entry {
my $plugin = shift;
my ($cb, $mt, $entry, $original) = @_;
ここをコメントアウトするだけ。こんな感じ。
sub APIPostSave_entry {
# my $plugin = shift;
my ($cb, $mt, $entry, $original) = @_;
結局、ここ、コールバック関数になってるようなんですが、引数をshiftしてしまってなんだかよくわからなくしてるんです。実体としては、その下の行に渡ってくるものだけなので、shiftが余計。$pluginも使ってないし、どこかからコピペしてきたのだろうか。。。これが原因で、下の方で$entryをsaveするんだけど、実体としては$originalをsaveしてしまって、そこにはblog_idがついてなくて、ブログの時差設定を読み込めずにmt-congif.cgiのTimeOffsetを使っていたというわけ。TimeOffsetを設定すればうまくいくってのも間違ってはなかったわけだが、根本原因はこちらでした。ちなみに、これはMT4.1のお話。他のバージョンではわかりません。
ちなみに、これ、Commercial.packってのに入ってるんですが、MTOSの4.2には入ってませんでした。なので起きなかった。あと、MySQLを使った場合は、今回のように投稿時にいきなりずれるのですが、SQLiteを使った場合には、投稿時はOKで、次を投稿すると前のが9時間ずれるなんてことになってました。これもよくわからないですが、上の修正で直りました。DBによって何か動作が違うんでしょうか。
再現条件をまとめるとこんな感じになるのかな。
- MT4.1(or それに近いバージョンで)
- Commercial.packのCustomFieldsが入っていて
- XMLRPCのAPI、つまりWindows Live Writerなどを使っている
場合に、時間がずれることがある。対策は上の通り、1行コメントアウトするだけ。もしくはTimeOffsetを指定。
ちなみに、ダブル投稿で解決してた理由はよくわからないし、調べる気もないです。^^;
あー、今日はゆっくり眠れる。
と、この投稿がうまくいけばだけど。^^
(追記) やったぜ!成功!
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。