これは、Ruby と Rails を使用してスタック レベルが深すぎる (SystemStackError) に遭遇したときに、どのデバッグ戦略を使用すべきかについての質問です。
rspec または cucumber を使用すると、これらのエラーが表示されます
perrys-MacBook-Pro:pc perry_mac$ cucumber
stack level too deep (SystemStackError)
/Users/perry_mac/.rvm/gems/ruby-1.9.3-p327/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:240
perrys-MacBook-Pro:pc perry_mac$ rspec
/Users/perry_mac/.rvm/gems/ruby-1.9.3-p327/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:240: stack level too deep (SystemStackError)
perrys-MacBook-Pro:pc perry_mac$
ここで紹介した問題は、rspec とキュウリの両方に依存していないと思われます。問題を絞り込む方法がわかりません。次に何を試せばいいですか?
私はすでに試しbundle update
ましたが、うまくいきました。
アプリは で正常に動作rails s
しますが、私が書いた rspec とキュウリのテストを利用したいと思います。
補遺:
たとえば、最も単純なテストでこれを確認します。
perrys-MacBook-Pro:pc perry_mac$ cat ./spec/controllers/page_controller_spec.rb
require 'spec_helper'
describe PageController do
end
perrys-MacBook-Pro:pc perry_mac$ rspec ./spec/controllers/page_controller_spec.rb
/Users/perry_mac/.rvm/gems/ruby-1.9.3-p327/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:240: stack level too deep (SystemStackError)
perrys-MacBook-Pro:pc perry_mac$
補遺 2: spec_helper のペーストビンはこちら: http://pastebin.com/ePdGyHQh
補遺 3: Gemfile のペーストビンはこちら: http://pastebin.com/xkLYGjsY
補遺 4: これが spec_helper.rb 内のエラーの原因となる行であると判断しました
require File.expand_path("../../config/environment", __FILE__)
その行の直前に意図的な構文エラーを入れると、「構文エラー」が発生します。行の後に同じ構文エラーを入れると、「スタックが深すぎるエラー」が発生します。
だいぶ進んだようです。require File.expand_path("../../config/environment", __FILE__)
別の方法で書く必要がありますか?
補遺 5: これを spec_helper.rb に追加しました:
puts File.path("../../config/environment")
puts __FILE__
require File.expand_path("../../config/environment", __FILE__)
そして今これを見てください:
perrys-MacBook-Pro:pc perry_mac$ rspec ./spec/controllers/page_controller_spec.rb
../../config/environment
/Users/perry_mac/rails_projects/pc/spec/spec_helper.rb
/Users/perry_mac/.rvm/gems/ruby-1.9.3-p327/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:240: stack level too deep (SystemStackError)
perrys-MacBook-Pro:pc perry_mac$
...しかし、出力に基づいた影響が何であるかはわかりません。
補遺 6: pry
を使用して、コードをステップ実行しました。失敗する直前の出力のペーストビンは次のとおりです : http://pastebin.com/c6ZfPmVn この時点まで実行が続くように見えます:
/Users/perry_mac/.rvm/gems/ruby-1.9.3-p327/gems/rspec-core-2.13.1/lib/rspec/core.rb @ line 69 RSpec.reset
補遺 7: rspec とキュウリが動作する古い git ブランチをチェックアウトできることを確認しました。作業ブランチを持つことで、最近の壊れたブランチを何らかの方法でデバッグするのに役立ちますか?
補遺 8: Pry の実行トレースによると、エラーは Rspec.reset の呼び出しの直後に発生します