这是一个关于在使用 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 和 cucumber 无关。我不确定如何缩小问题范围。接下来我应该尝试什么?
我已经尝试过bundle update
,运行良好。
该应用程序在 下运行良好rails s
,但我想利用我编写的 rspec 和 cucumber 测试。
附录:
我通过最简单的测试看到了这一点,例如:
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 的 pastebin 在这里:http ://pastebin.com/ePdGyHQh
附录 3:Gemfile 的 pastebin 在这里: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,我逐步完成了代码。失败前的输出 pastebin 在这里: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 和 cucumber 的旧 git 分支。有一个工作分支可以帮助我以任何方式调试最近损坏的分支吗?
附录 8:根据 Pry 执行跟踪,错误在调用 Rspec.reset 后立即发生