Rails 4.2.3 と Nokogiri を使用して Web サイトからデータを取得しています。サーバーから応答がないときにアクションを実行したいので、次のようにします。
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 接続が得られないか、サーバーが応答しない (または応答が得られないその他の理由) ため、応答がまったく得られない場合にのみ再試行します。私がそれをどのように持っているか以外に、この状況を考慮に入れるためのより一般的な方法はありますか? 私が考えていない例外の種類が他にもたくさんあるように感じます。