带有rspec的Ruby 1.9.1“无法修改冻结对象”

时间:2009-09-22 13:25:53

标签: ruby rspec

我刚刚更新到Ruby 1.9.1并且几乎所有的rspec都被打破了,给了我一个“无法修改冻结的对象”。甚至来自生成rspec_controller的Rspec示例代码也会失败。

RuntimeError in 'DownloadsController should use DownloadsController'
can't modify frozen object                                                                                                                                                          
/usr/local/lib/ruby19/1.9.1/timeout.rb:44:in `timeout'


Generated by the following code: 

it "should use DownloadsController" do
  controller.should be_an_instance_of(DownloadsController)
end

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

你是否使用你并不是试图将某些东西存在为零。

1.8没有被冻结。然而它在红宝石1.9中冻结。

答案 1 :(得分:0)

尝试打开/usr/local/lib/ruby19/1.9.1/timeout.rb并使用以下内容替换第44行:

begin
  return yield(sec) if sec == nil or sec.zero?
rescue => e
  puts e.backtrace.join("\n")
  raise e
end

虽然这看起来很奇怪,但在某些情况下,我发现这可以为我提供有关问题实际来源的更详细信息。如果您仍然不知道如何解决问题,请在此处粘贴结果,这可能会帮助我们找出问题。