2008/07/03

Windows Live Writer で投稿すると9時間ずれる件について(ファイナル!)

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 件のコメント:

コメントを投稿