我正在使用Rails 4.2.3和Nokogiri从网站获取数据。我想执行一个动作时,我没有得到来自服务器的响应,所以我有:在RoR中,如果我没有收到服务器的响应,如何捕获异常?
begin
content = open(url).read
if content.lstrip[0] == '<'
doc = Nokogiri::HTML(content)
else
begin
json = JSON.parse(content)
rescue JSON::ParserError => e
content
end
end
rescue Net::OpenTimeout => e
attempts = attempts + 1
if attempts <= max_attempts
sleep(3)
retry
end
end
请注意,这不是从服务器得到一个500不同。我只想在没有得到任何响应时重试,因为我没有得到TCP连接,或者因为服务器没有响应(或者其他导致我没有得到任何响应的原因)。考虑到这种情况,除了我如何拥有它之外,还有更通用的方法吗?我觉得有很多其他的异常类型我没有想到。
你不使用Nokogiri获取数据,您正在使用它来_parse_数据。 OpenURI“获取”数据。这是将Nokogiri从问题中删除的重要区别。此外,标题是误导性的; Rails是用Ruby编写的框架。你不用Rails编写东西,用Ruby编写它们,有时使用Rails的方法。我建议根据这些知识重新说明问题。您可以处理很多已定义的HTTP错误,并且_can_可以是由网站管理员定义的自定义HTTP错误,因此您必须注意这些错误。 –
我不关心网站定义的任何自定义消息 - 这意味着正在发回响应。我试图说明情况(只有情况),我根本得不到回应?是否清楚我所要求的 - 得到没有反应与得到回应表明其他条件? – Dave
您担心没有获得TCP连接或获取TCP连接,但服务器没有响应。 –