2012-04-04 12 views
5

हाय मैं HTTP क्लाइंट मणि का उपयोग कर रहा हूं और मुझे कोई समस्या है; मैं इसे उपयोगकर्ता साइनअप के लिए उपयोग करता हूं। चल उपयोगकर्ता नाम और पासवर्ड मेरी डेटाबेस के लिए डाला जाता है, लेकिन यह लंबे समय से इंतजार कर रहा है और मुझे वापस जबकिHTTP क्लाइंट :: रेलवे पर रूबी में प्राप्त करें टाइमटाइम एरर

HTTP Client::ReceiveTimeout Error in User Controller#signup execution expired. 

कैसे मैं अपने इस समस्या को ठीक कर सकते हैं?

उत्तर

5

मुझे लगता है कि आपका http कनेक्शन या दूरस्थ कनेक्शन स्थिर नहीं है। जब भी मुझे वह स्थिति हो, मैं टाइमआउट का उपयोग करता हूं और कुछ बार पुनः प्रयास करता हूं। निम्न कोड आपके कोड को 10 सेकंड के लिए निष्पादित करेगा, और यदि समाप्त नहीं हुआ है तो यह टाइमआउट और पुनः प्रयास करेगा। यदि पुनः प्रयास कई बार विफल रहता है, तो यह अंत में विफल हो जाएगा।

def timeout_and_retry 
    retries = 0 
    begin 
    Timeout::timeout(10) { yield } 
    rescue Timeout::Error 
    raise if (self.retries += 1) > 3 
    retry 
    end 
end 

timeout_and_retry do 
    # http client get code goes here 
end 
+0

मुझे टाइमआउट :: टाइमआउट (10000) का उपयोग किया गया है :) – yagmurdursun

+0

सुंदर। एक बड़े इनबॉक्स पर एक्सचेंजर टाइमआउट्स पर एक आकर्षण काम करता है। धन्यवाद। – avguchenko

11

get_timeout त्रुटि के लिए उपयोग करें;

client = HTTPClient.new 
client.receive_timeout = 10000 # setting receivetimeout for HTTPClient! 
+4

आप 'send_timeout = 0' और 'get_timeout = 0' भी समय-समय पर सेट कर सकते हैं। – tamersalama

0

कभी आप एक HTTP प्राप्त जब: ReceiveTimeOutError, इसका मतलब अनुरोध भेज दिया गया है और यह एक विशेष समय के लिए और कोई जवाब नहीं के बाद से इंतजार कर किया है, समय के भीतर, यह समाप्त हो रहा है और आप इस त्रुटि मिलती है।

हमेशा अधिक समय निर्दिष्ट करें ताकि यह प्रतिक्रिया के लिए अधिक समय तक प्रतीक्षा कर सके।