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
以上です.



