Rails/nokogiri_parse несколько ошибок обработки сайтов

Я работаю над Rails 3 и использую Nokogiri. Мой контроллер анализирует несколько сайтов и показывает результат в моем представлении. Проблема в том, что когда один из этих сайтов недоступен (например, ошибка 403 или 503), происходит сбой всех веб-приложений из-за этого сайта.

Мой вопрос: есть ли способ проверить доступность проанализированных страниц до того, как Nokogiri откроет их, или лучше, пройдя / игнорируя недоступность?

Спасибо

Часть моего контроллера:

Docvariable1 = Nokogiri::HTML(open("http://www.site1.com/"))
@variable1 = {}
docvariable1.xpath('//div[6]/h3/a').each do |link|
@variable1[link.text.strip] = link['href']
End



Docvariable2 = Nokogiri::HTML(open("http://www.site2.com/"))
@variable2 = {}
docvariable2.xpath('//div[6]/h3/a').each do |link|
@variable2[link.text.strip] = link['href']
End


Docvariable3 = Nokogiri::HTML(open("http://www.site3.com/"))
@variable3 = {}
docvariable3.xpath('//div[6]/h3/a').each do |link|
@variable3[link.text.strip] = link['href']
end

Часть моего взгляда

<% if @variable1 %>
<% @variable1.each do |key, value| %>
<li ><a href=" <%= "#{value}" %>" target='_blank' ><%= "#{key}" %></a>
<% end %>
<% end %>

<% if @variable2 %>
<% @variable1.each do |key, value| %>
<li ><a href=" <%= "#{value}" %>" target='_blank' ><%= "#{key}" %></a>
<% end %>
<% end %>

<% if @variable3 %>
<% @variable1.each do |key, value| %>
<li ><a href=" <%= "#{value}" %>" target='_blank' ><%= "#{key}" %></a>
<% end %>
<% end %>

PS: я знаю, что код не совсем "идеальный", потому что он противоположен принципу "СУХОЙ", все еще учусь;)

1 ответ

Решение

Вы можете попытаться поместить каждый из них в блок "начало - спасение", чтобы он не потерпел неудачу, если один из них недоступен. Затем вы можете обработать эти исключения, если это необходимо.

begin
    docvariable1 = Nokogiri::HTML(open("http://www.site1.com/"))
    @variable1 = {}
    docvariable1.xpath('//div[6]/h3/a').each do |link|
        @variable1[link.text.strip] = link['href']
    end
rescue
    # Handle exception
end
Другие вопросы по тегам