Movable Type の再構築エラー(コンテキスト外での利用)を解析方法
当サイトへのコメント欄に、
再構築をすると、「日付アーカイブ「Monthly2009xxxxxxxxxx」の再構築中にエラーが発生しました: テンプレート「月別ブログ記事リスト」の再構築中にエラーが発生しました: <mtEntryXXXX>タグでエラーがありました: mtEntryXXXXをコンテキスト外で利用しようとしています。MTEntriesコンテナタグの外部で使っていませんか? 」というエラーが出るのですが、どうすればよいでしょうか?
という手の質問をときどき頂くので、このエントリーでまとめておきます。
1.コンテキストについて
多分、質問されてくる方の大半が「コンテキスト」の意味が分からないものと推測しています。
コンテキストとは人によって解釈が異なりますが、ここでは、「Movable Type のテンプレートの、ある場所における、特定の情報を扱える状態」と定義します。
簡単に言い換えると、MTEntries タグの中は、ブログ記事系のテンプレートタグが扱えるコンテキストになります。
<mt:Entries>
[ブログ記事用のテンプレートタグが扱えるコンテキスト]
</mt:Entries>
また、MTCategories タグの中は、カテゴリ系のテンプレートタグが扱えるコンテキストになります。
<mt:Categories>
[カテゴリ用のテンプレートタグが扱えるコンテキスト]
</mt:Categories>
また、テンプレートタグ内部だけでなく、例えばブログ記事テンプレートであれば、ブログ記事テンプレート内全体がブログ記事用のテンプレートタグが扱えるコンテキストになります。
2.再構築エラーの解析方法について
下記のような再構築エラーを例に解説します。
Movable Type の再構築時のエラーメッセージは、先頭から順番にメッセージ内容を辿っていけば、原因が分かるようになっています。
まず、再構築でエラーが発生したページは、日付アーカイブ「Monthly20090401000000」ですが、「テンプレート「月別ブログ記事リスト」の再構築中にエラーが発生しました」とあるので、その元になるテンプレートが「月別ブログ記事リスト」であることが分かります。
次に、「<mtEntryDate>タグでエラーがありました」とあり、ここから「月別ブログ記事リスト」に記述された <mtEntryDate>タグが再構築エラーの原因であることが分かるので、テンプレート内に記述した、<mtEntryDate>タグを探してください。
エラーメッセージの最後に、「mtEntryDateをコンテキスト外で利用しようとしています。MTEntriesコンテナタグの外部で使っていませんか? 」とあります。<mtEntryDate>タグが使えるコンテキストは、
- MTEntries タグ内
- ブログ記事テンプレート
のいずれかなので、上記以外の場所で使われていることが再構築エラーの原因であることが分かります。
ちなみにこのエラーは、「月別ブログ記事リスト」の枠線で示した部分に、<mtEntryDate>タグを埋め込んだことが原因です。
3.エラーの解析のポイント
テンプレートモジュールやウィジェットを使っていると、エラーメッセージが長くなる場合がありますが、エラーメッセージの長さによらず、
- 元のテンプレート(モジュールやウィジェットではなく、インデックステンプレートやアーカイブテンプレート)
- エラーになっているテンプレートタグ(モジュールやウィジェットに記述されている場合もある)
- エラー種別(コンテキスト外での利用など)
の3つをエラーメッセージから抽出できれば、大体解決できると思います。
1つめの「元のテンプレート」は、テンプレート種別によってコンテキストが異なるので、コンテキスト関連のエラーであれば解析するために重要な情報となります。
なお、2つめの新しいブログを作った直後は、ブログ記事がひとつも存在しないので、テンプレートタグの使い方に誤りがあっても、出力すべきページがないため、テンプレートタグが評価されず、再構築エラーは発生しません(多分)。
4.参考図書
コンテキストはテンプレートタグを扱う場合に重要な概念と思っているのですが、このことについて扱っている Movable Type 関連書籍は下記の2冊のみです(認識が間違っていたらすいません)。
Movable Type 4.2 パーフェクトガイド 荒木 勇次郎 毎日コミュニケーションズ 2008-07-31 売り上げランキング : 1457 Amazonで詳しく見る by G-Tools |
Movable Type プロフェッショナル・スタイル MT4.1対応 CSS Nite 毎日コミュニケーションズ 2008-04-08 売り上げランキング : 2676 Amazonで詳しく見る by G-Tools |
「Movable Type 4.2 パーフェクトガイド」では、252~256ページで解説しています。
- MovableTypeプラグインの独自CGIをNginxに対応させる方法
- Movable Type 5で「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーになる場合の対処
- 旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法
- MT6.2のファイルアップロードで「Undefined subroutine &POSIX::strftime」になる問題の対処
- Movable Typeのファイルアップロードで「アップロードしたファイルは大きすぎます。」というエラーになる場合の対処
- Movable Typeのパスワード変更で「URLが不正です。」というエラーなる件についての対処
- Movable Typeで「Cannot find column 'blogs' for class 'MT::Blog'」となる場合の対処
- Movable TypeでMTPageNextタグが効かなくなる不具合について
- Movable Typeの復元で「Request-URI Too Large」になるときの対処
- サーバ故障と「Connection error: Too many connections」エラーおよびMySQLテーブル破損について
- Movable Typeでエラー発生箇所を特定する方法
- IE9でMovable Typeを利用する方法
- MTIfタグにtagモディファイアを利用する場合の注意事項
- Movable Type 5のブログの設定で「Can't call method &quot;label&quot; on unblessed reference」が発生する問題について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について(つづき)