2013-10-23 6 views
14

में नेट :: HTTP :: Post.new अनुरोध के लिए एक रीड टाइमआउट निर्दिष्ट करने के लिए कैसे करें मेरे पास एक रूबी स्क्रिप्ट से रेल अनुप्रयोग के लिए एक पोस्ट हो रही है। स्क्रिप्ट के रूप मेंरूबी 2

request.content_type = "application/json"  
request.body = JSON.generate(params) 

response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)} 

काफी प्रसंस्करण सर्वर साइड पर हो रहा का एक बहुत है इस प्रकार है जो तब प्रयोग किया जाता है

request = Net::HTTP::Post.new(url.path) 

के रूप में एक चर अनुरोध बनाता है, और मैं एक Net::ReadTimeout त्रुटि

हो रही है

मैं समय समाप्त अवधि

request.read_timeout = 500 
पे के रूप में

निर्दिष्ट करने के लिए करने की कोशिश की आर this stackoverflow answer लेकिन मुझे

undefined method `read_timeout=' for #<Net::HTTP::Post POST> (NoMethodError) 

त्रुटि मिली। मुझे लगता है कि मैं कहीं कुछ आसान याद कर रहा हूँ।

  • रूबी 2.0.0p247
  • रेल 4.0.0
  • विंडोज 7 32 बिट गहरे लाल रंग का
+0

[नेट :: HTTP रूबी में टाइमआउट प्राप्त करने के संभावित डुप्लिकेट] (http://stackoverflow.com/questions/19325479/nethttp-get-timeout-in-ruby) भी '.new', पोस्ट और प्राप्त होना चाहिए वही। –

+0

@CiroSantilli उस प्रश्न का एक स्वीकार्य उत्तर नहीं है। यह मेरा खुद का पालन करता है। – Jane

+0

संभव डुप्लिकेट [रूबी नेट :: HTTP.start] में सेवा कॉल के लिए \\timeout सेट करें (http://stackoverflow.com/questions/15157553/set-read-timeout-for-the-service-call-in -ruby-nethttp-start) –

उत्तर

22

इस के माध्यम से हल stackoverflow answer

: सभी सुराग कृतज्ञता

तकनीकी जानकारी प्राप्त मैंने अपना

बदल दिया है
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)} 

लाइन

response = Net::HTTP.start(url.host, url.port, :read_timeout => 500) {|http| http.request(request)} 

होने के लिए और इस इस समस्या को हल मिल गया है लगता है।

+0

यदि यह पोस्ट हो रहा है, तो ऐसा लगता है जैसे write_timeout समझ में आता है। :) – Eddie

20

read_timeout एक सादे Net::HTTP वस्तु के साथ उपलब्ध है:

url = URI.parse('http://google.com') 

http = Net::HTTP.new(url.host, url.port) 
http.read_timeout = 500 # seconds 

http.request_post(url.path, JSON.generate(params)) do |response| 
    # do something with response 
    p response 
end 
+2

नोट: read_timeout सेकंड में है, मिलिस नहीं। –

-4

किसी को अब भी समय-समाप्ति सेट मुद्दा और Net::HTTP टाइमआउट का सामना करना पड़ रहा है, तो काम नहीं कर रहा अपेक्षा के अनुरूप है, तो आप दृष्टिकोण नीचे के रूप में अच्छी तरह से पालन कर सकते हैं:

begin 
    Timeout::timeout(10) { 
     #### 
     ## YOUR REQUEST CODE WILL BE HERE 
     #### 
    } 
rescue 
    408 
end 
+6

आपको अवगत होना चाहिए कि 'टाइमआउट' धागे का उपयोग करता है और आपको इसके बारे में जागरूक होने की आवश्यकता है [http://www.mikeperham.com/2015/05/08/timeout-rubys-most- खतरनाक-api /)। –

+3

रूबी का टाइमआउट एक विशाल हथौड़ा है और केवल एक बड़ी गड़बड़ी का कारण बन जाएगा। इसका इस्तेमाल न करें। http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/ – AfDev