【问题标题】:Handling Net::ReadTimeout error in HTTParty处理 HTTParty 中的 Net::ReadTimeout 错误
【发布时间】:2014-10-08 07:31:39
【问题描述】:

我正在使用 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。 或者是否有避免发生此错误的最佳解决方案?

【问题讨论】:

  • 你解决了吗?对于一系列 API 调用,我也有同样的问题。超时对我也不起作用。

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


【解决方案1】:

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

  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

留在这里,以防其他人觉得有帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 2013-11-01
      • 2014-12-08
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2013-12-12
      相关资源
      最近更新 更多