Stack level too deep in Typo

Posted by ueda Mon, 20 Aug 2007 08:13:00 GMT

先日,Typoがstack level too deepというメッセージを表示して, 生成済みのキャッシュ以外にアクセス不能になってしまうという 問題が発生しました.

この問題の原因と,一応の解決方法について書きたいと思います.

stack level too deep…?

何故,突然エラーが出るようになったのか,まずは原因を探ってみることに. 調べてみたところ,railsとgettextのバージョンによってはこのエラーが出てしまうことがあるとのこと [1]. gemとdpkgで,それぞれバージョンが異なるruby-gettextパッケージをインストールしてしまっているのが問題のようです. この原因に当てはまるかどうかを調べてみました.

まずはgemのgettextのバージョンから.

$ gem search gettext
*** LOCAL GEMS ***
gettext (1.10.0)
    Ruby-GetText-Package is a libary and tools to localize messages.
$ gem search gettext --remote
*** REMOTE GEMS ***
Bulk updating Gem source index for: http://gems.rubyforge.org
gettext (1.10.0, 1.9.0, 1.8.0, 1.7.0, 1.6.0, 1.5.0, 1.4.0, 1.3.0, 1.2.0, 1.1.1, 1.1.0, 1.0.0)
    Ruby-GetText-Package is a libary and tools to localize messages.

gemでインストール済みのgettext-rubyは現状での最新版の様子. 次にMacportsでのバージョンを確認します.

$ port search gettext
gettext      devel/gettext      0.16.1 GNU gettext package
p5-locale-gettext perl/p5-locale-gettext 1.05  Perl interface to GNU gettext

そもそもMacPortsにはruby-gettextパッケージが存在していないようなので,別の原因を疑ってみることに….

原因は未来の記事

さらに調べてみたところ,Typoで記事を投稿する際に"published"にチェックを入れない状態で,"Publish at"に未来の時刻を指定して"Save"してしまうとstack level too deepが発生するようです [2] [3]

解決方法は特に載っていなかったので,Try & Errorでデータベースのデータを修正してみたところ,正常に動作するようになりました.作業手順は以下のとおりです.

まずは,データベース内のデータのダンプとバックアップを行います.

$ mysqldump -u typo_user -p typo_database > typo_db.sql
$ cp typo_db.sql typo_db_backup.sql

次に,triggersテーブルへのinsertクエリを全てコメントアウトします.

$ vim typo_db.sql
--
-- Dumping data for table `triggers`
--

LOCK TABLES `triggers` WRITE;
/*!40000 ALTER TABLE `triggers` DISABLE KEYS */;
/*INSERT INTO `triggers` VALUES (1,20,'Content','2007-07-24 16:33:00','publish!');*/
/*!40000 ALTER TABLE `triggers` ENABLE KEYS */;
UNLOCK TABLES;

データをデータベースに戻します.

$ mysqldump -u typo_user -p typo_database < typo_db.sql

以上です.

Posted in  | Tags ,