Подтвердить что ты не робот

Как поймать ошибку Connection reset by peer (Errno:: ECONNRESET)

Следующий код иногда генерирует ошибку "connection reset by peer". Может ли кто-нибудь показать мне, как справиться с этим исключением?

doc = Nokogiri::HTML(open(url))
Connection reset by peer (Errno::ECONNRESET)
4b9b3361

Ответ 1

Чтобы поймать его, сделайте это как любое другое исключение:

begin
  doc = Nokogiri::HTML(open(url))
rescue Errno::ECONNRESET => e
  puts "we are handling it!"
end

Более полезная модель - попробовать пару раз, а затем отказаться:

count = 0
begin
  doc = Nokogiri::HTML(open(url))
rescue Errno::ECONNRESET => e
  count += 1
  retry unless count > 10
  puts "tried 10 times and couldn't get #{url}: #{e}
end

Ответ 2

Еще более полезной моделью является использование повторов gem:

with_retries(:max_tries => 5, :rescue => [Errno::ECONNRESET], :max_sleep_seconds => 10) do
  doc = Nokogiri::HTML(open(url))
end