无法从带有rails 3.0.10的Backtrace RSPEC中找到匹配的行

时间:2011-08-22 02:02:34

标签: ruby-on-rails rspec

由于sql注入漏洞,我已更新到3.0.10。在我更新之后,我运行了测试,所有这些测试都开始抛出上述错误以及以下几行。

Failure/Error: Unable to find matching line from backtrace
SystemStackError:
  stack level too deep
# /home/part/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract/database_statements.rb:153

1 个答案:

答案 0 :(得分:1)

在将项目从Rails 2.3.8升级到3.2.2时,我在运行Cucumber功能时遇到了类似的错误。我几乎没有办法知道你可以找到这个错误的堆栈跟踪。

在我的例子中,真正的问题是双重包含一个名为rest-client的库,一次作为插件,一次作为gem。它在我的Gemfile中,以及我的vendor / plugins目录中。也许你可以快速检查你的项目是否有类似的东西。

我通过在代码的几个地方使用'raise'的繁琐过程发现了这一点。在导致此错误的rspec语句的执行路径中,将raise方法调用放在不同的位置,例如

raise StandardError, 'code did reach here'

通过一些二进制搜索逻辑,可以让您接近罪魁祸首代码。一旦你在那里,使用以下构造来获得堆栈跟踪。

begin
  # culprit code is here
rescue Exception => e
  puts e.message
  puts e.backtrace.inspect
end

至少对我有用,希望它对你有帮助。