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