2005年7月27日

MT復旧!再構築エラーの原因は・・・

category: MovableType — abetomo @ 15:04:30

MySQL移行失敗、そしてMT再構築エラー」の続き。

データ量を減らそうと思って、いったんインポートした記事を100件ほど削除したところ、次のようなエラーが出て再構築ができなくなってしまった。

Can’t use an undefined value as a SCALAR reference at lib/MT/Template/Context.pm line 780

この Context.pm というのがperlのファイルだということはすぐ分かった。だけど、何を直したら良いのかが分からない。

そこで、同僚のエンジニアさんに聞いてみた。すると、エラーそのものの意味は分からないが、記事を削除したことで該当記事が0になったカテゴリがあって、それがエラーを起こしているのでは?とのこと。

なので、まずはテンプレートからサイドメニューのカテゴリの記述を抜いて、再構築してみたらどうか、というアドバイスをもらった。

なるほど。そういえばデータベースの移行に失敗したのはカテゴリ絡みのエラーらしいし、確かにカテゴリがくさい気がしてきた。

ということで、さっそく全てのテンプレートからサイドメニューの「最近の記事」「最近のコメント」「カテゴリ」のリストを外した。それから、カテゴリ設定ページで「エントリー」が0になっているカテゴリを全て削除した。ついでにサブカテゴリもなくしておいた(後のMySQL移行のため)。

そしたら、難なく再構築できてしまった。おぉ、やっぱりカテゴリのせいだったのか?エンジニアさんのご指摘はビンゴだったのだ。お礼に“イケメン・エンジニア”の称号をあげよう!(いらない)

さらに原因を突き止めるため、外したリストを1つずつテンプレートに戻して再構築してみることに。すると「カテゴリ」だけでなく、「最近のコメント」のリストがあるときもエラーが出ることが分かった。

カテゴリはともかく、なんでコメントまで??

なんだかよく分からないが、とりあえず考えられるのは、カテゴリやコメントを呼び出す記述が間違っているということ。そこでまずはカテゴリの記述をよーく見てみると・・・あらら?

<$MTCategoryLabel$>となるはずのところが、なぜか<MTCategoryLabel>になっていた。

たぶんコレが原因だろう。でもなんで「$」が抜けているのかよく分からないが・・・。たぶん、どこかからコピペしたときに間違っていたんだろう。(だとしたら、よく今までエラーが起きなかったなあ)

ということで、「$」を追加してテンプレートを再構築してみた。問題なく完了。ブログのメインページのサイドメニューにもカテゴリリストが表示されている。やった!

次に、コメントの記述も「$」が抜けてるんじゃないかと思ってよく見たけど、こっちは特に間違ってはいない模様。じゃあなんで?と思った瞬間、あることに気がついた。

そういえば、記事自体は削除されているのに、その記事についたコメントが1件だけ取り残されていたのだ。そうか、きっとこれに違いない!

そのコメントを削除して、サイドメニューに「コメント」リストを追加して再構築すると・・・成功!

というわけで、今回の再構築エラーの原因をまとめると、

  • 過去記事を削除したことで、該当記事が0になったカテゴリがあった。
  • サイドメニューのカテゴリリストの記述が間違っていた。
  • 該当記事が削除されているのに、コメントだけが残っていた。

ということになるかと。でもカテゴリが0になったことでエラーを起こすんだったら、親階層のカテゴリは敢えて0件にする使い方もあるだろうから、それもエラーを起こすことになるんだろうか?とちょっと腑に落ちないけど・・・。

ともかく、これでMTを最初からインストールする手間は省けた。バンザイ!

この後またMySQLへの移行に挑戦したんだけど、長くなったのでまた今度。

このエントリーは

投稿クライアントの「BlogWrite」

により投稿されました。

コメントはまだありません

コメントはまだありません。

このコメント欄の RSS フィード

コメントフォームは現在閉鎖中です。

Copyright 2004-2009 abetomo, All rights reserved.
Powered by WordPress 2.6.2