2012-04-04 13 views
5

Ciao Sto usando gemma HTTPClient e ho un problema; Lo uso per la registrazione degli utenti. Durante l'esecuzione di nome utente e password vengono inseriti al mio database, ma Lunghe attese e tornare a meHTTPClient :: ReceiveTimeoutError in Ruby on Rails

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

come posso risolvere il mio problema?

risposta

5

Immagino che la tua connessione http o connessione remota non sia stabile. Ogni volta che ho questa situazione, uso il timeout e riprovo per alcune volte. Il codice seguente eseguirà il codice per 10 secondi e, se non è terminato, andrà in timeout e riproverà. Se il tentativo fallisce per molte volte, alla fine fallirà.

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

Sono stato utilizzato Timeout :: timeout (10000) :) – yagmurdursun

+0

Bello. Funziona a meraviglia quando Exchanger timeout su una grande casella di posta. Grazie. – avguchenko

11

Uso per errore receive_timeout;

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

puoi anche impostare 'send_timeout = 0' e' receive_timeout = 0' non per il timeout. – tamersalama

0

Quando mai si ottiene un HTTP: ReceiveTimeOutError, significa che la richiesta è stata inviata e lo ha fatto in attesa di un momento particolare e dal momento che nessuna risposta, entro il tempo, esso scade e si ottiene questo errore.

Specificare sempre più tempo per attendere più a lungo la risposta.