2013-07-11 2 views
5

Nginxを使用すると、クライアントが接続を途中で終了したときにHTTP 499がエラーログに記録されます(たとえば、接続がタイムアウトした、ユーザがブラウザをリロードした、さもないと)。RailsでHTTP接続クロージャを検出する

Nginxはソケットが閉じられたことを示すSIGPIPE信号を受け取ることになるので、これを検出できることを理解していますが、この通知をRailsに戻すことが可能かどうかは疑問です。

Shopifyは最近、Unicornでこれを検出する前にvery novel approachを使用して処理するRailsにリクエストを送信しましたが、長時間実行中のトランザクションなど、Railsアプリでこれを検出できるようにしたいと考えています。

+0

私の知る限り(これは間違っている可能性があります)解決策はありません。 (そのため、ShopifyはリクエストをRailsに送信する前にそれを検出しようとしています)。この問題は、Railsを停止しても問題ではありませんが、途中でdbトランザクションを停止する方法はありません。あなたの質問の主な関心事だと思います。 –

答えて

1

Railsのディスパッチャがすでにリクエストの処理を開始した後、処理が完了したときに限り、httpクライアントへの接続はなくなり、レスポンスはクライアントに返されます。

したがって、基本的に、クライアント(ブラウザなど)が既に処理中に接続をシャットダウンしたかどうかを確認する方法はありません。

関連する問題