MovableType 5.2.9→6.2
概要
MovableType 6シリーズは、MySQLのみをバックエンドとして利用可能である。 5.2.9でこれ以外のバックエンドを利用している場合には、先にデータベースの移行を行う必要がある。 1) 移行に関しては、MovableType 5.2.9→5.2.9(データベース移行)を参照のこと。
旧バージョンからコピーしておくべきファイル群
- plugins
- addons
- extlib
- themes
- mt-static/plugins
- mt-static/addons
- mt-static/support
- mt-static/themes
これらのディレクトリで新しいバージョンにないものは既存のものからコピーしておく。 2)
バグ
6.2に入れ替えた途端に、ブログページが表示できなくなった。 サーバは500 (Internal error)を返すだけで、error_logにもなんの出力もない。 即ち、php の問題だ。
php.ini の中の次のパラメータをOnにして、apacheを再起動し、もう一度ページにアクセスすればエラーメッセージが表示される。
display_errors = On log_errors = On
当サイトで遭遇したのは次の三点である。
- DynamicMTML.pack の参照渡し
- php/lib/class.mt_config.php の静的メンバーへの変数によるアクセス
- lib./MT/Template/Tags/Asset.pm で非初期化変数へのlcに対する警告が出る
一点目は Notice なので、放置しても今のところ問題はないし、そもそも DynamicMTML.pack自体 5.2.9から引き写したものなので、いささか古い感は否めない。
二点目は、php 5.4で禁止されたコードで Fatal なので、これを直さない限り永劫にウェブページは表示されない。
php 5.3を推奨とかで済まされるレベルの話ではないので、どうにかしないといけないのだが、真面目にコードを修正するのも面倒なので、5.2.9のファイルをそのままコピーしてしまった。今のところ問題なく動いている。
三点目は、エラーではないが警告が出る。410行目の lc ()なのだが、
my $so = lc ( $args->{sort_order} ) || ( $blog ? $blog->sort_order_posts : undef ) || '';
となっている。確かに、 $args→{sort_order}は未初期化だし、実際に undefもあり得るから、このような評価式になっているのだと考えられる。 なので、
my $so = lc ( $args->{sort_order} || ( $blog ? $blog->sort_order_posts : undef )) || '';
のように書き換えた。