2012-04-04 23 views
5

こんにちは私はHTTPClient gemを使用していますが、問題があります。私はユーザーのサインアップに使用します。実行中のユーザー名とパスワードは私のデータベースに挿入されていますが、長い時間待って帰ってきますRuby on RailsのHTTPClient :: ReceiveTimeoutError

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

私は使用されてきました。 Exchangerが大きな受信トレイでタイムアウトしたときに魅力を発揮します。ありがとうございました。 – avguchenko

11

receive_timeoutエラーに使用します。

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

'send_timeout = 0'と' receive_timeout = 0'をタイムアウトに設定することもできます。 – tamersalama

0

あなたがHTTP GET史上:ReceiveTimeOutErrorを、それは要求が送信されていて、それが時間内に、有効期限が切れると、このエラーを取得し、特定の時間や応答がないので、待って行われたことを意味します。

応答時間が長くなるように常に指定してください。