Nokogiriのエラー処理(open-uri使用時)

書き方に統一感が全く無いのは、全く違うときに書いたためです。そのうち書き直します。

手抜き版

def nokogiri_wrapper(&nokogiri)
  nokogiri.call 
rescue
  puts "error in Nokogiri..retry"
  sleep 1
  retry
end

使い方

doc = nokogiri_wrapper { Nokogiri::HTML.parse(open(url)) }

ちょっとマシ版

def open_uri_error_retry(&nokogiri_process)
  retry_count = 0
  begin
    result = yield
  rescue OpenURI::HTTPError, Errno::ECONNRESET, Errno::ETIMEDOUT => ex
    if retry_count <= 5
      log.error "#{ex.message} retry..."
      sleep 1
      retry
    else
      log.error ex.message
    end
  rescue => ex
    log.error ex
  end
  result
end

使い方

doc = open_uri_error_retry { Nokogiri::HTML.parse(open(url)) }