处理HTTParty中的Net :: ReadTimeout错误

时间:2014-10-08 07:31:40

标签: ruby-on-rails ruby ruby-on-rails-3.2 httparty

我正在使用httparty(0.13.1)gem。我正在使用httparty进行一系列API调用。我的一些初始API调用成功,但后来的调用连续失败。我添加了180秒的超时。我搜索谷歌,但我仍然找不到任何解决方案。很长一段时间我因此而苦苦挣扎。

我的代码:

response = HTTParty.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2", timeout: 180)

错误:

A Net::ReadTimeout occurred in background at 2014-10-05 11:42:06 UTC :

我不知道这次是否有效?我觉得180秒足以检索响应,因为默认超时是60秒。如果我想处理网络读取超时错误,有没有办法做到这一点?如果发生此错误,我想返回nil。 或者是否有最佳解决方案可以避免发生此错误?

2 个答案:

答案 0 :(得分:13)

对于不同的模块有类似的问题,在我的情况下,如果重试它可能会成功,所以我抓住超时并重试。

  max_retries = 3
  times_retried = 0

  begin
    #thing that errors sometimes

  rescue Net::ReadTimeout => error
    if times_retried < max_retries
      times_retried += 1
      puts "Failed to <do the thing>, retry #{times_retried}/#{max_retries}"
      retry
    else
      puts "Exiting script. <explanation of why this is unlikely to recover>"
      exit(1)
    end
  end

如果其他人觉得有帮助,请留在这里。

答案 1 :(得分:5)

您可以使用rescue来处理超时异常:

begin
  HTTParty.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2", timeout: 180)
rescue Net::ReadTimeout
  nil
end