我正在运行一个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上是不可能的。它可能与线程有关吗?
答案 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。