MovableTypeの最近のブログ記事

以前「アーカイブの再構築で失敗」で書いた障害の件。

結局、どうしてそういう状態になったのかは不明。
最初は問題なく再構築できてて、途中からこんな状態になったということなので、何らかの誤操作があったのかもしれないが、再現できなかったので原因わからず。

取りあえず、DB の中身を手動で更新して、再構築は出来るようになった。
実行した SQL は下の2つ。


UPDATE
   mt_blog
SET
   blog_archive_type='Category,Individual,Monthly'
WHERE blog_id=44


UPDATE
   mt_templatemap
SET
   templatemap_archive_type='Category',
   templatemap_file_template='%c/%i'
WHERE
   templatemap_id=166 and
   templatemap_blog_id=44


ちょっと、これで様子を見てみるのだ。

mapping.GIF

MovableTypeの話。

アーカイブの再構築ができないブログがある。

再構築をしようとしたら

ブログ記事「ほげほげほげ」の再構築中にエラーが発生しました:
テンプレート「日付アーカイブ」の再構築中にエラーが発生しました:
<mtCategories>タグでエラーがありました:
<mtCategoryArchiveLink>タグでエラーがありました:
カテゴリアーカイブを公開していないので<$MTCategoryArchiveLink$>は使えません。

とエラーが出て再構築中断となる。

で、このブログ、何かよくわからない。

新しいアーカイブのマッピングをしようとしたら、種類のところに普通は「日別」「週別」とかアーカイブの種類の一覧が出るはずなのに、「ブログ記事」としかでない。(画像参照)

なんでぇ?

MovableType 3 から 4 にバージョンアップしたブログだが、同時に作業した他のブログは正常にプルダウンにアーカイブタイプが表示される。

うーん・・・
この情報ってどこからとってきてるんかなあ。
とりあえずググってみたけど、同じような現象に悩んでるケースは見つからなかった。相当特殊な現象なんかなあ。

denki_unagi.jpg

俺のメインブラウザは FireFox なんだが、ブログの更新だけは InternetExplorer を使っている。

なぜなら、「なんでか知らんけど、FireFox じゃあ、プルダウンメニューが開かんのんじゃもん」というのが理由。

上の画像の左側が FireFox のもの。右が IE だ。

ねっ!FireFox じゃあ、一応オンマウスでメニューの色は変わってるけど、プルダウンメニューが開いてないでしょ。

この話をたまたま今日お客さんと打ち合わせをしているときにしたんだけど、「ええ?マジっすか?」という話になって、その場で FireFox でお客さんのブログ(MT4.x)の管理画面を開いてみたら・・・ちゃんと動くんでやんの。(^^;

ありぃ?(^^;;;;;

FireFox のバージョンはうちと同じ 3.0.6 だった。
ただ、MovableType 4 の細かいバージョンがわからないので(うちは、MTOS 4.23-ja)、もしかしたら MT のバージョンによって問題が出る可能性があるのかもしれない。
・・・ま、MTOS も最新バージョンだし、それはあり得ないだろうが・・・

しっかし、ブログ書くときだけ IE を立ち上げるのは面倒くせぇ!!

<追記>
ちなみに、Vista Business SP1 のデスクトップパソコンの FireFox 3.0.6 でも、XP Professinal SP3 のノートパソコン上の FireFox 3.0.6 でも同じ現象が起きているので、特定のパソコンだけの問題ではないようです。
MTOS 4.23-ja との相性が悪いのか・・・それとも、FireFox の方で、設定変更の必要があるのか・・・
識者の人、教えてぇ!!

MovableType で 20個くらいのブログを公開されているお客さんがいらっしゃる。

んで、公開しているブログの一覧ページがあって、それぞれのブログ名の横に、そのブログの最新公開日をわしが作ったプログラムでセットしている。

・・・がバグってた。(^^;

引っ張ってきている日付が公開日ではなく作成日だったのだ。

SELECT A.entry_blog_id AS blog_id,
       MAX(A.entry_created_on) AS release_date
FROM   mt_entry A
    JOIN
       (SELECT entry_blog_id
        FROM mt_entry
        GROUP BY entry_blog_id
        ORDER BY entry_blog_id) B
    ON A.entry_blog_id = B.entry_blog_id
GROUP BY A.entry_blog_id;

という SQL で、それぞれのブログの entry_created_on の一番大きいヤツ(つまり最新の entry_created_on)を取ってきていたんだが、entry_created_on って作成日じゃん。'entry_create' だからな。

だから、2月14日にエントリーを作成すると、作成日には 2009-02-14 がセットされる。
そして、このエントリーを 2月18日に公開すると、公開日には 2009-02-18 がセットされるが、作成日は当然 2009-02-14 のままだ。
なので、2月18日に公開したにも関わらず、ブログの横の最新公開日は 2月14日のままになっていたのだ。

実は、このお客さんは以前は MovableType 3.x を使っており、このプログラムはその頃から使っていたのだがあまり問題にはならなかった。最近、4.x にバージョンアップしてから問題になったのだ。

どうも、(聞いた話なので間違いがあるかもしれないが)3.x の時は、エントリーを公開すると、作成日も公開した日にちに更新されていたようなのだ。
つまり、上の例で言うと、2月18日に公開したら、作成日にも 2009-02-18 がセットされるということだ。だから、作成日を引っ張ってきてても、公開したあとにはちゃんと最新公開日が更新されていたわけである。

ただ、この場合も、作成日を引っ張っていると、まだ公開していないうちから最新公開日が更新されてしまうので、どっちみち問題があるのだ。
公開したのに最新公開日が更新されない場合よりも目立たないので、3.x 時代は誰も日付がおかしいことに気づかなかったのだろう。

mt_entry テーブルで公開日がセットされているのは entry_authored_on だそうだ。

ということで、上記の SQL 文の

       MAX(A.entry_created_on) AS release_date

を、

       MAX(A.entry_authored_on) AS release_date

に変更してOK。
実際の公開日が最新公開日にセットされるようになった。

mterror20090212_1.gifのサムネール画像

むむむ。

MT3 系から MT4 系(MTOS 4.23-ja)にバージョンアップしたブログがあるのだが、

1.ブログ記事の編集中に「確認」ボタンを押すと、「Can't call method "entry_based" on an undefined value」というエラーが出てしまう。

2.カテゴリー・アーカイブ(category/sub_category/index.html)の編集中に「保存」または「確認」ボタンを押すと、「不正な要求です。」というエラーが出てしまう。()

という2点の問題が発生している。

1については、「MTタグの ArchiveTitle を EntryTitle に変更すればOK」という情報を見つけたのだが、影響が大きいので取りあえず保留。(どうも、ArchiveTitle を EntryTitle に単純に変更しただけでは、再構築時に「<mtEntryTitle>タグでエラーがありました: mtEntryTitleをコンテキスト外で利用しようとしています。MTEntriesコンテナタグの外部で使っていませんか? 」というエラーが出るらしいし)

2については、テンプレートを作られた方にもう一度最初からテンプレートの新規登録をしてみていただくようお願いしている。そこで、もう少し内容の分かり易いエラーが出れば・・・と思っているのだが。(「不正な要求です。」ではあんまりだ)

ちなみに、2の問題については、<html><head><body>タグだけのような単純なテンプレートに置き換えてみても同じエラーが出た。そのため、テンプレートの内容が問題ではなく、「Shift_JIS のデータ(日本語のカテゴリ名)が問題」というようなややこしい話になっちゃうかも・・・というヤな予感も・・・

<追記>
やっぱ、日本語のカテゴリの無いブログでやっても同じエラーが出るので、日本語の問題じゃないんだろうなあ。

以前、「MTOS 4.23-ja で run-periodic-tasks を実行すると」というエントリーで書いた、MovableType の Perl モジュールへのパスが通ってない件。(相対パスで指定されており、cron で実行したとき、正しいパスとならない)

crontab に run-periodic-tasks を、

*/5 * * * * /var/www/html/mt/tools/run-periodic-tasks

と登録していたが、

*/5 * * * * cd /var/www/html/mt; ./tools/run-periodic-tasks

とするのが MovableType の正しい流儀のようだ。

確かにこれなら、相対パスでも Bootstrap.pm や MT.pm を見つけることが出来る。

Movable Type 4 ドキュメントの「指定日投稿や公開キュー等のスケジュール処理の設定」にも、例としてそう書かれていた。
ドキュメントはちゃんと読むべきだなあ。(いまさら)

作業メモ。

今回は 3.21-ja の環境は残しておき、4.23-ja の環境でテストをして問題なければ(テンプレート等の修正が必要であればそれを行った後)移行を行いたい・・・という要件だったので、以下のような手順を取った。

0.現行の環境<現行ブログ(3.21-ja)>
 ・管理画面
 /var/www/mt1(http://www.exsample.com/mt1/
 ・公開ディレクトリ
 /var/www/blog1(例:http://www.exsample.com/blog1/testblog
 ・DB名
 mt1db
1.現行のDBをバックアップ&リストアし、現行とは別名で DB 作成(例:mt2db)。
2.現行の環境(管理画面、公開コンテンツ等)を別名でコピー(3.21-ja)テスト用の環境作成<テストブログ(3.21-ja)>
 ・管理画面
 /var/www/mt2(http://www.exsample.com/mt2/
 ・公開ディレクトリ
 /var/www/blog2(例:http://www.exsample.com/blog2/testblog
 ・DB名
 mt2db
3.4.23-ja を新規インストール。DB は新規に作成したダミーのDB(例:mt3db)を使用。<新ブログ(4.23-ja)>
 ※インストール作業は、ユーザ登録、最初のブログ作成までちゃんと行うこと。後で消しちゃうけど。
 ・管理画面
 /var/www/mt3(http://www.exsample.com/mt3/
 ・公開ディレクトリ
 /var/www/blog3(例:http://www.exsample.com/blog3/testblog
 ・DB名
 mt3db
4.新ブログの mt-config.cgi を修正し、DBを mt2db に変更。
5.新ブログの管理画面にアクセスし、DB の更新処理を実行。(自動実行される)
6.新ブログの管理画面で、各ブログを再構築。
7.新ブログの公開ページ(例:http://www.exsample.com/blog3/testblog)にアクセスし内容を確認し、足りないものがあればコピー。
 (例えば、mt-static の下にタイトル画像などを置いている場合)
8.プラグインのインストール。(但し、4.23-ja 未対応のプラグインがある場合は、残念ながらアンインストール(手動でテンプレート等修正))

以上。
テストブログは作成しなくてもよかったのだが、今回はもしかしたら現行を触って確認するケースが出てくるかもと、念のため作成した。(結局、必要なかったけど(^^;)

これで、お客さんにてチェックがすんだ段階で、

0.ブログの更新中止。
1.現行のDBをバックアップ&リストアし、新DB(mt2db)を最新に。
2.ディレクトリ名を変更。(現行を *_old のようにして、新ブログを現行のディレクトリ名に変更)
3.crontab 等のパスも変更。
4.Apache の再起動。(必須)
5.新ブログの管理画面にアクセスし、DB の更新処理を実行。(自動実行される)
6.新ブログの管理画面で、各ブログを再構築。(公開パス変更)

という作業を行い、移行終了・・・のはず。

この後、

1.テストブログ(/var/www/mt2 や /var/www/blog2)を削除。
2.ダミーDB(mt3db)を drop する。

という作業を行い、全ての作業終了となる予定。現行DBは念のため、しばらく取っておく。
2,3ヶ月置いておいて、何も起きなければ現行ブログのディレクトリとともに、削除してかまわないだろう。

・・・て感じかな。

MovableType 3.21-ja から MTOS 4.23 へアップグレードした環境での MailPack プラグイン(v1.6)の利用にて。

携帯から投稿したエントリーの日本語が化ける!!
ちなみに、PublishCharset が 'Shift_JIS' のサイトでの出来事である。

原因は、create.pm で変換後文字コードを決めるために PublishCharset を参照しているところ。
PublishCharset が 'Shift_JIS' と指定されていれば変換後コードを 'sjis' と指定するようになっているが、mt-config.cgi の中では 'shift_jis' と指定されているので(つまり 'Shift_JIS' とは違うので)、「その他の文字コード」という判断になり、Unicode(UTF-8)に変換されてしまうのである。

mt-config.cgi の記述を直すのが本道だとは思うが、その他のプラグインや MTOS では 'shift_jis' を正しく「シフトJIS の指定文字列」と認識しているようなので、MailPack でも 'shift_jis' を 'sjis' と判断するよう create.pm を修正した。

実は、MovableType 3.21-ja の mt-config.cgi を引き継いでいるのだが、この中で例として出ている Unicode の指定が 'utf-8' という具合に全部小文字なのだ。それを見てシフトJISの指定をしたので、'shift_jis' と全部小文字になっているわけだ。
(ちなみに、この 'utf-8' という指定も、create.pm の中では Unicode と認識してもらえず('UTF-8' と書かないと駄目)、「その他の文字コード」扱いになってしまうのだが、「その他の文字コード」の場合は変換後文字コードが Unicode なので、結果としてオッケーなのだ)

つーことで、create.pm 修正しちゃったので、開発元のサポート受けられないんだろうなあ。ま、あんまり必要ないけど・・・

MTOS に MailPack plugin を入れるのに、いくつかの Perl モジュールもインストールしないといかん。

WebARENA SuitePRO V2 のサーバ(CentOS 4.7 x86_64)の場合、以下のようなモジュールのインストールが必要だった。(この順にインストールしていけばいい)

IO-stringy-2.110
Pod-Escapes-1.04
Pod-Simple-3.07
Test-Simple-0.81_02
Test-Pod-1.26
TimeDate-1.16
MailTools-2.04
MIME-Base64-3.07
MIME-tools-5.420_02

あと、おまけで、
IO-1.2301

IOがらみのトラブルの話は
http://blog.netandfield.com/shar/2009/01/iofilebinmode.html
にて。