2012-04-04 43 views
5

Hola, estoy usando HTTPClient gem y tengo un problema; Lo uso para el registro de usuarios. Mientras se ejecuta el nombre de usuario y contraseña se insertan a mi base de datos, pero las largas esperas y vuelven a míHTTPClient :: ReceiveTimeoutError en Ruby on Rails

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

¿Cómo puedo solucionar mi problema?

Respuesta

5

Supongo que su conexión http o conexión remota no es estable. Cada vez que tengo esa situación, uso el tiempo de espera y vuelvo a intentar algunas veces. El siguiente código ejecutará su código durante 10 segundos, y si no está terminado, se agotó el tiempo de espera y vuelve a intentarlo. Si el intento vuelve a fallar muchas veces, fallará eventualmente.

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

He sido utilizado Timeout :: timeout (10000) :) – yagmurdursun

+0

Hermoso. Funciona con encanto cuando el Exchanger expira en una bandeja de entrada grande. Gracias. – avguchenko

11

Use para el error receive_timeout;

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

también puede establecer 'send_timeout = 0' y' receive_timeout = 0' para no agotar el tiempo de espera. – tamersalama

0

Cuando cada vez que recibe un HTTP: ReceiveTimeOutError, significa que la solicitud ha sido enviado y lo ha hecho la espera de un momento determinado y puesto que ninguna respuesta, dentro del tiempo, caduca y se obtiene este error.

Especifique siempre más tiempo para que espere más tiempo para la respuesta.