gpt4 book ai didi

ruby - 将 rspec 和 cucumber 与 ruby​​ 和 rails 一起使用时堆栈级别太深 (SystemStackError)

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:19 26 4
gpt4 key购买 nike

这是一个关于在使用 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:我刚刚确认我可以检查一个旧的 git 分支,它有工作的 rspec 和 cucumber 。有一个工作分支可以帮助我以任何方式调试最近损坏的分支吗?

附录 8:根据 Pry 执行跟踪,调用 Rspec.reset 后立即发生错误

最佳答案

我用

找到了原因
git bisect

git show [commitID]

我能够通过我的提交日志返回并找到一个工作版本。然后,使用 git bisect here 的指令,我能够找到引入堆栈太深错误的提交。然后我使用 git show [commitID] 来查看可能存在的两行代码。他们是:

# file:app/controllers/thisControllerFileIhave.rb

require 'dicom'
include DICOM

进行此更改似乎解决了问题:

require 'dicom'
#include DICOM

老实说,我不记得我为什么添加“include DICOM”(提交时间是 2012 年 10 月),我也不明白为什么或如何导致 rspec 和 cucumber 如此惊人和神秘地失败。我也不明白如何在 rails s 下运行应用程序可以很好地处理这段代码,但测试套件却不行。我要感谢建议 git bisect 的发帖人,但他们的评论似乎已被删除。

对于这个问题,我得到的大部分答案和评论并没有直接解决调试策略,而是提供了作者何时看到并纠正此类错误的第一手资料。我很高兴遇到 git bisectgit show,我觉得它们确实是查明此类问题根源的强大选项。

关于ruby - 将 rspec 和 cucumber 与 ruby​​ 和 rails 一起使用时堆栈级别太深 (SystemStackError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16512114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com