ruby catch连接超时错误

时间:2013-12-20 08:59:04

标签: ruby ruby-on-rails-3 mechanize

我在Ruby中使用Mechanize将表单发布到站点以获取数据。偶尔,我会收到错误

too many connection resets (due to Operation timed out - Errno::ETIMEDOUT) after 13 requests on 34234234234242, last used 20.518373 seconds ago

这会使服务器崩溃。我想抓住这个错误并处理它(稍后通过重试)。

我试过

 begin 
    postForm(form)
  rescue Errno::ETIMEDOUT
    puts "=====>TimeOut ERROR!:"  
  end

但它没有抓住错误。 我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:0)

看起来Mechanize捕获了Errno::ETIMEDOUT错误并抛出了包含错误消息的新异常。因此,异常类名称不同,并且无法用Errno::ETIMEDOUT捕获。

要确定错误类型,请尝试以下操作:

begin 
  postForm(form)
rescue => e
  puts e.class  
end

这将为您提供异常类名称,您可以更新rescue子句。

答案 1 :(得分:0)

如果您阅读了整个错误消息,您会发现由于“连接重置次数过多”而导致您失败:超时只是导致连接重置13次并且已经获救的原因。

因此,如果您阅读Net-Http-persistent >here<的来源,您将看到需要捕获的错误是:

Net::HTTP::Persistent::Error