2012-04-04 28 views
5

Merhaba HTTPClient gem kullanıyorum ve bir sorunum var; Kullanıcı kaydı için kullanıyorum. çalışan kullanıcı adı ve şifre benim veritabanına eklenen ama uzun bekler ve bana dön ederken HTTPClient :: Ruby on Rails'de ReceimTimeoutError

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

nasıl benim sorunu çözebilirsiniz?

cevap

5

Sanırım, http bağlantınız veya uzak bağlantınız kararlı değil. Bu duruma sahip olduğumda, zaman aşımı kullanın ve birkaç kez yeniden deneyin. Aşağıdaki kod 10 saniyeliğine kodunuzu çalıştırır ve eğer bitmezse zaman aşımına uğrar ve tekrar dener. Yeniden deneme birçok kez başarısız olursa, sonuçta başarısız olur.

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

Kullanıldık Timeout :: timeout (10000) :) – yagmurdursun

+0

Güzel. Büyük bir gelen kutusundaki Eşanjör zaman aşımları olduğunda bir çekicilik çalışır. Teşekkür ederim. – avguchenko

11

Receiver_out.html hatası için kullanın;

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

ayrıca "send_timeout = 0" ve "take_timeout = 0" ayarlarını zaman aşımına ayarlayamazsınız. – tamersalama

0

bir HTTP olsun hiç: ReceiveTimeOutError, bu isteğiniz gönderildi ve zaman içinde süresi sona ve bu hatayı, belirli bir süre için ve hiçbir tepki beri bekleyen çıkarmış demektir.

Her zaman yanıt için daha uzun süre beklemesi için daha fazla zaman belirtin.