Ruby 超时赢得';第一次超时发生后,无法重置

Ruby 超时赢得';第一次超时发生后,无法重置,ruby,Ruby,我预计在以下代码中,超时将每30秒发生一次: def action_with_timeout(threshould, &block) begin Timeout::timeout(threshould) {block.call} rescue Exception => e ap("Timeout #{threshould}, stop loading pag, #{Time.now}") stop_loading_page end end whi

我预计在以下代码中,超时将每30秒发生一次:

def action_with_timeout(threshould, &block)
  begin
    Timeout::timeout(threshould) {block.call}
  rescue Exception => e
    ap("Timeout #{threshould}, stop loading pag, #{Time.now}")
    stop_loading_page
  end
end
while true
  action_with_timeout(30) {
    ap("to INDEX")
    browse_to(CONFIG["ROOT_URL"])
  }
end    
然而,它只是第一次起作用。剩余的将在短时间内超时。输出为:

"Timeout 30, stop loading pag, 2015-07-01 19:59:10 +0800"
"Timeout 30, stop loading pag, 2015-07-01 19:59:13 +0800"
"Timeout 30, stop loading pag, 2015-07-01 19:59:16 +0800"
"Timeout 30, stop loading pag, 2015-07-01 19:59:19 +0800"

如何修复它?

救援异常
将救援任何异常(这样做是一种选择)

为了挽救您感兴趣的异常,请具体说明:

require 'timeout'

def action_with_timeout(sec, &block)
  Timeout::timeout(sec, &block)
rescue Timeout::Error
  # ...
end

其他例外情况将不会被挽救。这将揭示您的实际问题。

您确定该异常是超时异常而不是其他异常吗?您应该查看它通过
将e
放在
ap(…)
之前得到的异常。如果您只想捕获超时异常,请改用
rescue timeout::Error=>e