Ruby 为什么我没有从线程块中得到任何错误?

Ruby 为什么我没有从线程块中得到任何错误?,ruby,Ruby,我正在运行一个rails 4应用程序,在libs下的一个模块中有一个代码行,它会引发某种异常,但是rails控制台和开发人员控制台中都没有显示这一点?所以我很幸运地找到了上面提到的代码行?为什么没有例外和stacktrace?或者如何找到错误的来源 例如,我必须跟随 Thread.new { @rates.each do |rate| rate.save_rate unless rate.total.nil? or rate.total.empty end } rate.t

我正在运行一个rails 4应用程序,在libs下的一个模块中有一个代码行,它会引发某种异常,但是rails控制台和开发人员控制台中都没有显示这一点?所以我很幸运地找到了上面提到的代码行?为什么没有例外和stacktrace?或者如何找到错误的来源

例如,我必须跟随

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

    rate.save_rate unless rate.total.nil? or rate.total.empty
  end
}
rate.total是一个fixnum,我得到一个错误,因为是空的?在fixnum上不可能。可能与线程有关吗

更新:另外,请参见@zettetic的评论

如果这是您的全部代码,那么这是因为您调用了一个新线程,而不是等待它完成。这意味着,ruby解释器触发一个线程,当脚本结束时,它立即退出,所以线程块中的任何内容都没有机会执行

尝试从终端运行此脚本:

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)

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

请提供示例代码。这几乎是正确的,但是线程也可能在主程序之前终止,而不产生任何输出,因为线程中发生的异常会导致它安静地死去,除非Thread.abort_on_exception从false更改为true。谢谢@zettetic,我没有注意到abort_on_exception选项。
  t.rb:2:in `block in <main>': won't see me (RuntimeError)