2016-11-09 3 views
0

私はPOSTリクエストを消費し、リクエストから関連情報を記録し、200 OKで応答するエンドポイントを持っています。それはそれは迅速に対応し、いくつかの時間を取ることができ、ログエントリを処理することが重要ですので、私はこの変更できる場合、私は思ったんだけど:これまですぐに応答してから、コントローラで後続の処理を行いますか?

def my_endpoint 
    generate_log_entry 
    render nothing: true 
end 

を:

def my_endpoint 
    render nothing: true 
    generate_log_entry 
end 

私はかなり確信しています私はできません - renderへの呼び出しは、後でRackミドルウェアライフサイクルで提供するためのレスポンスを構築するだけだと思います。ログを非同期プロセスに委譲しているのは私の唯一のオプションですか?

+1

簡単に言えば、長時間実行しているプロセスがある場合は、応答がすぐに送信されるかどうかにかかわらず、リクエスト処理パイプラインに関係しないようにしてください。メソッドが実行されます。 –

答えて

1

このオプションを使用すると、アクションはビューをレンダリングした後、応答を送信する前に実行されます。したがって、応答時間が影響を受けます。

class YourController < ApplicationController 
  after_action :generate_log_entry, only: :my_endpoint 
  
    #your stuffs 
end 

だから私はあなたがsucker_punchのようなライブラリを使用することができ、それは非同期プロセスへのロギングを委任するより良いと思います。

関連する問題