Rails 3.2.14 の使用。次のように、コントローラーのアクション応答をストリーミングしています。
def my_controller_action
stream = StreamingClass.new(*args) #responds to each
response.sending_file= true
headers.merge!(
'Content-Disposition' => 'inline',
'Content-Transfer-Encoding' => 'binary',
'Cache-Control' => 'no-cache'
)
self.status = 200
self.content_type= 'application/json'
self.response_body = stream
end
ストリーミングは問題なく動作しますが、問題は、ストリーミングが完了する前 (つまり、それぞれが「ストリーム」オブジェクトで呼び出される前) にコントローラーのアクションが返されることです。「ストリーム」オブジェクトを self.response_body に代入すると、基本的にすぐに戻ります。
ロギングを整理するために lograge gem を使用しています。Lograge は基本的に「process_action.action_controller」通知をサブスクライブします。ストリーム オブジェクト コードに費やされた時間を追跡せずに、実際のコントローラーの戻り時間に基づいてタイミング (期間、db_runtime など) を記録しています。
大変な作業は StreamingClass メソッドで発生しますが、ログからこの情報が完全に失われています。ログにストリーミング応答のタイミングを含める方法はありますか?