2012-02-09 29 views

Trả lời

31

Để bắt nó, làm nó giống như bất kỳ ngoại lệ khác:

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

Một mô hình hữu ích hơn là cố gắng một vài lần, sau đó bỏ:

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

Cảm ơn. Thực sự học được rất nhiều từ stackoverflow :) – revolver

+1

Thông tin thêm về mẫu thử lại này của Ruby: http://blog.mirthlab.com/2012/05/25/cleanly-retrying-blocks-of-code-after-an-exception -in-ruby/ –

4

Một mẫu hữu ích hơn nữa là sử dụng retries gem:

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

Hoặc đá quý phổ biến hơn và được duy trì [truy xuất] (https://github.com/kamui/retriable). –

Các vấn đề liên quan