rspec上的Ruby分割错误

rspec上的Ruby分割错误,ruby,ruby-on-rails-3,rspec-rails,Ruby,Ruby On Rails 3,Rspec Rails,这真的很奇怪。我在这个Rails 3.2.11应用程序中做得很好,在早上早些时候运行了rspec。我创建了一个新分支,更改了一个文件,提交了,并运行了rspec spec/当我看到大量的分段错误和堆栈跟踪时,我已经看到了它 我已经更新了rvm,并尝试安装ruby 1.9.3的早期版本。我一直被挂在原始的宝石上,然后重新启动。重新启动OS X 10.8.3后,我能够干净地安装ruby 1.9.3-p429。但rspec仍在保释。完整堆栈跟踪为。自从宝石被清理干净后,我就把它们捆起来安装了。我还尝试

这真的很奇怪。我在这个Rails 3.2.11应用程序中做得很好,在早上早些时候运行了rspec。我创建了一个新分支,更改了一个文件,提交了,并运行了rspec spec/当我看到大量的分段错误和堆栈跟踪时,我已经看到了它

我已经更新了rvm,并尝试安装ruby 1.9.3的早期版本。我一直被挂在原始的宝石上,然后重新启动。重新启动OS X 10.8.3后,我能够干净地安装ruby 1.9.3-p429。但rspec仍在保释。完整堆栈跟踪为。自从宝石被清理干净后,我就把它们捆起来安装了。我还尝试再次运行rspec生成器,但它似乎只覆盖了一个支持文件。铁轨、耙子、黄瓜似乎运转正常。Rake在到达rspec命令时失败

我试图从stacktrace中提取似乎相关的部分:

    Happenstance:tickat sam$ rspec spec/
/Users/sam/.rvm/gems/ruby-1.9.3-p429/gems/better_errors-0.8.0/lib/better_errors/core_ext/exception.rb:9: [BUG] Segmentation fault
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-darwin12.3.0]
控制帧信息 Ruby级别回溯信息 其他运行时信息
一直到2030行。

虽然我仍然不知道为什么rspec在“分离头”状态下工作,但不是在提交状态下工作,但我最终还是发现了一些我讨厌的错误。在stacktrace的前几行中,似乎出于某种原因与Ruby和better_错误存在冲突。我将提交一份报告。感谢您的帮助。

请确保从GEM文件的测试组中删除
更好的\u错误
以及可能的
绑定\u调用者
,这是导致错误的原因。如果您查看报告分段错误的行,则报告错误的是
better\u errors

.../better_errors/core_ext/exception.rb:9: [BUG] Segmentation fault 
因此,您的GEM文件应该如下所示:

group :development do
  gem 'better_errors'
  gem 'binding_of_caller'
end

# for testing to work with rspec
group :test do
  gem 'rspec-rails'
  gem 'factory_girl_rails'
  gem 'ffaker'
  gem 'capybara'
  gem 'database_cleaner'
  gem 'launchy'
end

Rspec在某些情况下会导致分段错误,例如,如果您使用
let递归。这会在RSpec内核中产生
vm\u call\u cfunc-cfp一致性错误
、Ruby崩溃报告和
分段错误:11

let!(:some_var) { "Some value" }

describe '.method' do
  ...
  let!(:some_var) { create(:model, some_var: some_var) }
end

当您恢复所做的更改时会发生什么情况?您做了什么更改?更改为css文件中的字体名称。一切都结束了。奇怪的是,当我从这个上午恢复到提交时,Rspec工作了。一定是因为处于“头部分离”状态。当我签出master时,它会返回到ruby错误。所以当你重新更改字体名称时,它会正常工作吗?不会。Rspec只在我处于“分离头”状态时运行。在阅读这种状态时,我看不出这是为什么。从我所读到的,它只是没有指向一个特定的引用,但这些文件本质上与我签出的提交中的文件相同?Git重置或提交,rspec再次失败。如果是这样的话,应该运行恢复到早期提交,但它不会运行。这为我解决了这个问题。谢谢我刚才遇到的另一个例子是,在它自己的
let
block中意外地插入了一个对象。e、 g.
let(:obj){create:obj;allow(obj).to receive(:thing)}
。这是一个无限循环。谢谢。。。在我的案例中发生的是一个愚蠢的递归。
* Loaded script: /Users/sam/.rvm/gems/ruby-1.9.3-p429/bin/rspec
* Loaded features:
    0 enumerator.so
    1 /Users/sam/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/x86_64-darwin12.3.0/enc/encdb.bundle
    2 /Users/sam/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/x86_64-darwin12.3.0/enc/trans/transdb.bundle
    3 /Users/sam/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/defaults.rb
.../better_errors/core_ext/exception.rb:9: [BUG] Segmentation fault 
group :development do
  gem 'better_errors'
  gem 'binding_of_caller'
end

# for testing to work with rspec
group :test do
  gem 'rspec-rails'
  gem 'factory_girl_rails'
  gem 'ffaker'
  gem 'capybara'
  gem 'database_cleaner'
  gem 'launchy'
end
let!(:some_var) { "Some value" }

describe '.method' do
  ...
  let!(:some_var) { create(:model, some_var: some_var) }
end