2013-07-11 10 views
5

Quando si utilizza Nginx, vi sono delle volte in cui l'HTTP 499 viene registrato nel log degli errori quando il client ha chiuso prematuramente la connessione (ad esempio, la connessione è scaduta, l'utente ha ricaricato il browser o premuto Stop o altrimenti).Rilevamento della chiusura della connessione HTTP in Rails

Capisco che Nginx è in grado di rilevare questo perché sono la fine che riceverà il segnale SIGPIPE che indica che la presa è stata chiusa, tuttavia mi chiedo se è possibile ottenere questo avviso di nuovo a Rails a tutti?

Shopify ha recentemente utilizzato uno very novel approach per rilevare questo in Unicorn prima di inviare la richiesta su Rails da elaborare, tuttavia vorrei essere in grado di rilevare questo all'interno dell'app Rails, ad esempio durante una transazione di lunga durata.

+0

A causa della mia conoscenza (che potrebbe essere errata) non c'è soluzione a questo. (è per questo che Shopify cerca di rilevarlo PRIMA di inviare una richiesta a Rails). Il problema non è nemmeno con l'arresto di Rails, ma non c'è modo di fermare la transazione db nel mezzo, e penso che sia la preoccupazione principale della tua domanda. –

risposta

1

Dopo che il dispatcher di Rails aveva già avviato l'elaborazione della richiesta, non vi è più alcuna connessione con il client http, solo quando l'elaborazione viene eseguita, la risposta viene restituita al client.

Quindi, in pratica, non è possibile stabilire se il client (ad esempio: browser) ha interrotto la connessione mentre è già in elaborazione.

Problemi correlati