ムーバブルタイプ(MovableType)

MovableTypeの「Can’t call method “execute” on an undefined value」というエラーが発生するときはなにかが1000件を超えた時

この記事は約3分で読めます。

MTexecute当WEBサイトはMovableType6で運営している。先日「Can’t call method “execute” on an undefined value」というエラーが発生して記事の修正や新規追加ができなくなった。この日は3件のブログ記事を書いており、2件までは普通に書けた。3件目の記事を公開した直後にこのエラー表示がでた。記事一覧は見ることができるが、そのうちの一つの記事をクリックして修正しようとするとエラーになる、このエラーの原因と対策を探ってみた。

「Can’t call method “execute” on an undefined value」の原因

「Can’t call method “execute” on an undefined value」が出たのは初めてではない。以前もサイトマップ生成(sitemap.xml)のテンプレートでこのエラーを起こしている。このときの原因はMovableTypeは構造上の仕様で999件以下しか管理できない部分があり、1000件になった瞬間にエラーになるということだった。

当ブログでは、記事数が3000件を超えており、1000件を超えた分のsitemapを分割している。ここでエラーが起きたのではないかと推定した。早速、このsitemap.xmlのテンプレートの内容を確認し修正した。

<MTEntries offset=”3996″ lastn=”999″>
<url>
<loc><$MTEntryPermalink encode_xml=”1″$></loc>
<lastmod><$MTEntryModifiedDate utc=”1″ format=”%Y-%m-%dT%H:%M:%SZ”$></lastmod>
</url>
</MTEntries>
</urlset>

しかし、今回のエラーはこの部分が原因ではなかった。なんとタグが1000件になっていた。タグが1000件に達したことで「Can’t call method “execute” on an undefined value」というエラーになっていたのだった。

タグが1000件になるとエラーになる

このようにタグの一覧は表示することができる。ブログ記事の一覧も表示できる。しかし、ブログ記事の一覧から記事をクリックして開こうとすると「Can’t call method “execute” on an undefined value」というエラーが表示され編集できない。

そもそもこのタグは、ほとんどが記事ではなく写真アイテムだった。写真の説明文と同じものをコピペしてタグの部分に貼り付けていたことがあり、そのことが仇になったようだ。

対策としては、タグ一覧から不要なタグを削除することである。999以下であればエラーにならないが、余裕をみてこのさい不要なものは一気に削除して100以下にまで減らした。これ以降、「Can’t call method “execute” on an undefined value」というエラーは起きていない。