Ich werde etwas weiter auf meinen Kommentar eingehen. Sie können retry
verwenden, um zum begin
zurückzukehren:
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error "Fehler: #{ex}"
retry
end
Das wird weiterhin versuchen (und Fehler protokollieren), bis es funktioniert oder Sie es manuell beenden. Das ist wahrscheinlich nicht das, was Sie wollen, da Sie bei einem kleinen Fehler in einer Endlosschleife landen können. Ein einfacher Weg, dies zu umgehen, besteht darin, es beispielsweise 10 Mal versuchen zu lassen und dann aufzugeben:
MAX_ATTEMPTS = 10
doc = nil
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error "Fehler: #{ex}"
attempts = attempts + 1
retry if(attempts < MAX_ATTEMPTS)
end
if(doc.nil?)
# Unternehmen Sie etwas gegen den persistenten Fehler
# damit Sie später nicht versuchen, auf ein nil zuzugreifen.
end
Etwas Ähnliches wird einige Male versuchen und dann aufgeben. Sie könnten auch einen sleep
-Aufruf vor dem retry
einfügen, wenn Sie etwas Zeit vergehen lassen möchten, bevor der nächste Versuch unternommen wird. Oder Sie könnten die Exception untersuchen (möglicherweise mit mehreren rescue
-Blöcken), um zu entscheiden, ob Sie sofort aufgeben, warten und erneut versuchen oder sofort wiederholen sollten.