为什么我没有从Thread块中获得任何错误?

时间:2015-01-24 22:15:15

标签: ruby

我正在运行一个rails 4应用程序,并且我在libs下的模块中有一个代码行引发了某种异常,但这不会在rails控制台中显示在开发控制台中?所以我通过运气找到了提到的代码行?为什么没有异常和堆栈跟踪?或者我怎样才能找到错误来源?

例如,我必须遵循

 Thread.new {
  @rates.each do |rate|

    rate.save_rate unless rate.total.nil? or rate.total.empty
  end
}

rate.total是一个fixnum,我从空得到一个错误?在fixnum上是不可能的。它可能与线程有关吗?

1 个答案:

答案 0 :(得分:0)

更新:另外,请参阅@zetetic的评论。

如果这是你的所有代码 - 原因是你调用一个新线程,而不是等待它完成。这意味着,ruby解释器会触发一个线程,当脚本结束时,它会立即退出,因此Thread块内部没有任何内容可以执行。

尝试从终端运行此脚本:

Thread.new do
  raise "won't see me"
end

几乎可以肯定,你不会看到任何事情发生。

现在让我们等待线程完成(使用join)。

Thread.new do
  raise "won't see me"
end.join

如果我运行$ ruby t.rb,我终于可以在stdout中看到错误:

  t.rb:2:in `block in <main>': won't see me (RuntimeError)

如果我添加了一些东西 - 除非你真的知道,你在做什么,否则我不建议使用Threads。