2013-10-23 2 views
14

angeben Ich habe eine Post-Anwendung zu einem Rails-Anwendung von einem Ruby-Skript. Das Skript erstellt eine Variable Anfrage alsWie ein Lese-Timeout für eine Net :: HTTP :: Post.new Anfrage in Ruby 2

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

, die dann verwendet wird, als

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

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

folgt Es gibt eine ganze Reihe von Verarbeitung auf der Serverseite passiert, und ich bin immer einen Fehler Net::ReadTimeout

I versucht, eine Timeout-Periode

request.read_timeout = 500 

als PE angeben r this stackoverflow answer aber ich habe eine

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

Fehler. Ich nehme an, dass mir irgendwo etwas Einfaches fehlt. Alle Hinweise erhalten dankbar

Technische Informationen:

  • Rubin 2.0.0p247
  • Rails 4.0.0
  • Windows 7 32-Bit-Rubin
+0

möglich Duplikat von [Net :: HTTP Get-Timeout in Ruby] (http://StackOverflow.com/Questions/19325479/Nethttp-Get-Timeout-In-Ruby) Auch für '.New' sollte Post und Get sein das Gleiche. –

+0

@CiroSantilli diese Frage hat keine akzeptierte Antwort. Dies tut, wenn auch mein eigenes. – Jane

+0

mögliches Duplikat von [Set read \ _timeout für den Serviceaufruf in Ruby Net :: HTTP.start] (http://stackoverflow.com/questions/15157553/set-read-timeout-for-the-service-call-in -ruby-nethttp-start) –

Antwort

22

über diese Gelöst stackoverflow answer

Ich habe meine

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

Linie scheint zu sein,

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

und dies, um dieses Problem bekommen zu haben.

+0

Wenn es posten, scheint write_timeout Sinn zu machen. :) – Eddie

20

Die read_timeout ist mit einem einfachen Net::HTTP Objekt zur Verfügung:

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

Hinweis: Das read_timeout ist in Sekunden, nicht Millis. –

-4

Wenn jemand noch Timeout Einstellung Problem und Net::HTTP Timeout gegenüber nicht wie erwartet funktionieren, dann können Sie auch unter Ansatz folgen:

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

Sie sollten wissen, dass 'Timeout' Threads verwendet und Sie sich dessen bewusst sein müssen (http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api) /). –

+3

Rubys Timeout ist ein riesiger Hammer und wird nur zu einem großen Durcheinander führen. Benutze es nicht. http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/ – AfDev

Verwandte Themen