Expandiré mi comentario un poco. Puede utilizar retry
a volver a la begin
:
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error "Error: #{ex}"
retry
end
Que a seguir tratando (y errores de registro) hasta que funcione o se matan manualmente. Sin embargo, eso probablemente no es lo que quieres, ya que un pequeño error te enviará a un ciclo infinito. Una forma fácil de solucionar que es dejar que se trate para, por ejemplo, 10 veces y luego se dio por vencido:
MAX_ATTEMPTS = 10
doc = nil
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error "Error: #{ex}"
attempts = attempts + 1
retry if(attempts < MAX_ATTEMPTS)
end
if(doc.nil?)
# Do something about the persistent error
# so that you don't try to access a nil
# doc later on.
end
Algo como esto va a probar un par de veces y luego abandonar. También puede poner una llamada sleep
antes del retry
si desea esperar un poco antes del próximo intento o investigar la excepción (posiblemente con múltiples bloques rescue
) para elegir si debe abandonar inmediatamente, esperar y volver a intentar, o volver a intentar inmediatamente.
En primer lugar tratar de abrir la url separetly pase en nokogiri, pues esto podría permitir bugfixing más fácil –
Quieres decir esto ?: 'doc = open (url) .read.strip Doc = Nokogiri :: HTML (doc) ' – Sayuj
No, quiero decir' data = open (url) .read.strip' luego en la siguiente línea 'doc = Nokogiri :: HTML (data)' –