0

我正在 Rails 3 上开发并使用 Nokogiri。我的控制器解析多个站点并在我的视图上显示结果。问题是,当这些站点之一不可用时(例如 403 或 503 错误),所有 webapp 都会因为该站点而崩溃。

我的问题:有没有办法在 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:我知道代码不是很“完美”,因为它与“DRY”原则相反,仍在学习;)

4

1 回答 1

1

您可以尝试将其中的每一个都放在 begin -- rescue 块中,因此如果其中一个不可用,它不会失败。然后,您可以在必要时处理这些异常。

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
于 2013-07-31T21:19:00.760 回答