2013-10-23 4 views
14

ruby​​スクリプトから投稿アプリケーションが発生しました。Ruby 2でNet :: HTTP :: Post.newリクエストの読み込みタイムアウトを指定する方法

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エラー

を取得しています

私はPEとしてタイムアウト期間

request.read_timeout = 500 

を指定しようとしましたr this stackoverflow answerですが、私は

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

エラーがあります。どこか単純なものが欠けていると思います。

  • ルビー2.0.0p247
  • のRails 4.0.0
  • のWindows 7 32ビットルビーこの経由して解決しよう
+0

[Net :: HTTP get timeout in Ruby](http://stackoverflow.com/questions/19325479/nethttp-get-timeout-in-ruby)また、 '.new'に対しては、postとgetが必要です同じ。 –

+0

@CiroSantilliその質問には受け入れられた回答がありません。これは、私自身のものですが、そうです。 – Jane

+0

[Ruby Net :: HTTP.startでサービスコールのread \ _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

'Timeout'はスレッドを使用していることに注意してください。あなたは[その影響を知る必要があります](http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api /)。 –

+3

Rubyのタイムアウトは巨大なハンマーであり、大きな混乱につながるだけです。それを使用しないでください。 http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/ – AfDev

関連する問題