2012-02-09 11 views
13

निम्न कोड कभी-कभी "सहकर्मी द्वारा कनेक्शन रीसेट" त्रुटि उत्पन्न करता है। क्या कोई मुझे दिखा सकता है कि इस अपवाद को कैसे संभाला जाए?त्रुटि पकड़ने के लिए कैसे सहकर्मी द्वारा कनेक्शन रीसेट (Errno :: ECONNRESET)

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

उत्तर

31

यह पकड़ने के लिए किसी भी अन्य अपवाद की तरह यह करना:

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

धन्यवाद। वास्तव में स्टैक ओवरफ्लो से बहुत कुछ सीखा :) – revolver

+1

इस रूबी 'पुनः प्रयास' पैटर्न के बारे में अधिक जानकारी: http://blog.mirthlab.com/2012/05/25/cleanly-retrying-blocks-of-code-after-an-exception -इन-रूबी/ –

4

एक retries gem का उपयोग करने के लिए और भी उपयोगी पैटर्न है:

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

या अधिक लोकप्रिय और बनाए रखा [पीछे हटने योग्य] (https://github.com/kamui/retriable) मणि। –

संबंधित मुद्दे