Ruby on rails 无法从具有rails 3.0.10的回溯RSPEC中找到匹配的行

Ruby on rails 无法从具有rails 3.0.10的回溯RSPEC中找到匹配的行,ruby-on-rails,rspec,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_adapt

由于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

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

在我的例子中,真正的问题是双重包含一个名为rest客户端的库,一次作为插件,一次作为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

这至少对我有用,希望对您有所帮助。

您使用的是什么版本的rspec?您正在使用数据库事务回滚吗?rspec和rspec rails都是2.6.0。我刚发现问题出在工厂女孩身上。我在创建工厂时遇到堆栈级别太深的错误。您可以尝试设置
config.use\u transactional\u fixtures=false
它应该在您的spec\u helper.rb中。database_statements.rb的第153行处理事务,这可能就是问题所在。但我需要在事务中运行测试。不这样做将意味着大量的测试代码更改。好吧,这是我最好的猜测。你有更长的堆栈跟踪吗?