MT復旧!再構築エラーの原因は・・・
「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への移行に挑戦したんだけど、長くなったのでまた今度。