10

私のRoRアプリ開発マシン(ローカルサーバー、OSX 10.8.1、Ruby 1.9.3、Rails 3.2.8)では、何か奇妙なことが(もちろん…)見え始めました。

Railsサーバーが崩壊し(すべてのルートが強制終了され、サーバーを再起動することがサーバーを再び機能させる唯一の方法です)、次のログエントリが表示されます。

SystemStackError (stack level too deep):
  actionpack (3.2.8) lib/action_dispatch/middleware/reloader.rb:70


  Rendered /Users/dekay/.rvm/gems/ruby-1.9.3-head@global/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms)
  Rendered /Users/dekay/.rvm/gems/ruby-1.9.3-head@global/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms)
  Rendered /Users/dekay/.rvm/gems/ruby-1.9.3-head@global/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.7ms)

私はグーグルで調べて、SystemStackErrorは通常無限ループが原因であることがわかりましたが、それを追跡できる限り、コードにそのようなループはありません。また、エラーはアプリケーションロジックの特定のステップにあるようには見えません。

サーバーのクラッシュと私のアクションの唯一の相関関係は次のとおりです。

  1. アプリのコードを変更する
  2. アプリの現在のウェブページをリロードします
  3. ブーム、サーバーがなくなった、エラーメッセージ。
  4. この後、ページは機能しません。エラーは次のとおりです。

    ルーティングエラー

    [GET]「/」に一致するルートはありません

    利用可能なルートの詳細については、レーキルートを実行してみてください。

誰かがこれをデバッグするための正しい方向に私を向けることができますか?PS:不注意な「バンドルの更新」の後に起こったのではないかと思います。これはできますか?

4

1 に答える 1

2

エラーはさまざまな理由で発生する可能性があり、エラー メッセージはあまり役に立たないため、stack level too deepエラー メッセージをデバッグするのは簡単ではありません。rails app

につながる理由のいくつかstack level too deep error:

  1. gem とプラグインの矛盾、およびアプリケーションのその他の依存関係。
  2. コード構文エラー
  3. データベースの移行を誤って適用したことによる不整合。

システムの起動時にエラーが発生した場合は、次のヒントが非常に役立ちます: http://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-デ/

説明によると、アプリはしばらく正常に動作しているように見えますが、その後クラッシュし始めます。そのため、上記の起動ケースは当てはまらない可能性があります。

問題を特定する方法の 1 つは、printf デバッグline/block of codeを使用して、エラーの原因となっている特定のものを特定することです。

また、変更をロールバックしてシステムを動作状態に戻し、変更を段階的に元に戻して根本原因を特定することも価値がある場合があります。

bundle updateこの場合、did がエラーを引き起こした可能性が非常に高いです。そのため、新しく追加された依存関係をチェックして、それらが原因であるかどうかを確認することをお勧めします。

于 2012-12-24T05:06:18.947 に答える