Movable Type についてのあれこれ

  • 投稿日:
  • by
  • カテゴリ:

ogp_mt.jpgようやく、設定がおおかたおいつき、ブログがほぼ平常運転となりました。長かった、ここまで。

Movable Typeを5から6へ、それに伴ってデータベースをPostgreSQLからMySQLへと移行するのは一筋縄ではいかない作業でした。

更に、サーバのOSを64bit化するにあたって、既存の環境に無理矢理64bit環境をはめ込むのではなく、一から64bit OSをインストールして、旧環境へと近づけていく作業も、なかなかに困難なものでした。

その顛末をちょっと、書き綴っておこうかと思います。

PostgreSQLからMySQLへの移行は、MTの管理画面を使って行います。「システム→ツール→バックアップ」でバックアップをとり、バックエンドをMySQLへと入れ替えて初期設定をしたら、「システム→ツール→復元」で戻す。公式サイトで、そう説明されていますが、これがそんなに簡単な話ではなかったのです。

バックアップ作業は概ね問題ありません。終わります。普通に。問題は復元なのです。まず、最初、何も考えないで、バックアップを作成したら、復元の際に、マニフェストファイルを読んだところで死にました。正確には、復元のためにバックアップファイル本体を読んでいる途中でタイムアウトした、というべきでしょうか。そう、バックアップファイルが大きすぎるとダメなのです。

なので、バックアップを作成するときに、「ファイルを分割する」指定にしないとダメでした。読み込みでタイムアウトする危険性があるので、最小のサイズ300KBを指定して、バックアップを作りました。

しかし、これでも、まだ問題があるのです。ファイルからの復元が全て済んだ後、最後の作業をどうやら、バックエンドでやっているようなのですが、この処理が長すぎてタイムアウトします。

うちは、自分のサーバなので、Apacheの Timeout をざっくり3600秒に拡大して逃げましたが、レンタルサーバなんかでは出来ないところもあるかも知れません。とにかく、復元は簡単な話ではないのです。もし、あなたが、MovableTypeのDBを移行するとか、サイトを引っ越すとか考えているのであったら、悪いことはいいませんから、やめておいた方が無難です。

罠は、MT自身にもありました。無事、DBを移行し、MTを6.2に更新した途端、ブログが見えなくなりました。エラー500を返すようになってしまったのです。phpのロギング機能をONにしたら、静的メンバーへ、変数を使ってアクセスしていることが判明。これはPHP 5.4で禁止になった操作なので、PHP 5.3を使えばいいだろうとかそういう問題ではなく、修正されるべきものだと思います。

とはいえ、そんなもん、一から仕様を調べて、修正している暇はないので、動作していた、MT-5.2.9の当該モジュールをざっくりとコピーしてきてしまいました。これでとりあえず解決。本当は何か問題あるかもしれないけれど、外向けのIFが同じならとりあえずなんとかなる、ビバ☆オブジェクト指向!

最後は、アクセスカウンターです。もう、これ、とっちゃえばいいかとも思ったんですが、一応残すことに。何が問題かというと、どうも、rubygems関連では、PostgreSQL関連のサポートは、ruby 1.9.3以降のみって決めちゃったみたいなんです。

これは、MTではなくVine Linuxの問題。今時のディストリビューションで、ruby 1.8を標準にしているのなんてないでしょう、他に。とりあえず、どうするか思案した結果、古いバージョン持ってくればいいんじゃない?ってことで、バージョンを遡りながらトライ。どうやら、dbd-pg は全滅。というか、ruby-dbi の場合、dbd-pgもpgも別に違いはないので、今度は、pgの方を調べると、どうやら0.18.1はアウトで0.18.0はOKと判明。

なので、0.18.0をインストールすることに。

# gem install pg --version 0.18.0

これで、カウンターも戻ってめでたしめでたし。

ついでに、インデックスページの一番下の「次へ」ボタンを押すとエラーになってしまうのもすっかり元通り、というか全然改善してなくてびっくり、という状況ですが、今後ともよろしくお願いします。

余談: RPC用のパスワードって言うのがいつの間にか追加されていました。Windows Live Writerのような外部ツールとの連携にはこっちのパスワードを使わないといけなくなりました。もちろん、MTの管理ページへのログインパスワードとは別にするべきなので、ツールの方も一々、パスワードを書き換えていかないといけなくなりました。まあ、一回だけの手間ですけれどね。