立即服务响应然后在控制器中进行后续处理?

时间:2016-11-09 23:34:01

标签: ruby-on-rails

我有一个端点,它消耗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 个答案:

答案 0 :(得分:1)

您有此选项,操作将在呈现视图后执行,但在发送响应之前执行。因此响应时间将受到影响。

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

因此,我认为将日志记录委派给异步进程会更好,您可以使用sucker_punch之类的库。