发送后访问响应状态

时间:2018-05-12 14:49:59

标签: ruby-on-rails ruby http

我正在开发一项功能,用于存储在我的应用中对特定端点发出的请求。

after_action :record_user_activity
def record_user_activity
  return unless current_user
  return if request.url =~ /assets|packs/
  @session.navigation.create!(
    uri: request.url,
    request_method: request.method,
    response_status: response.code.to_i,
    access_time: Time.now
  )
end

问题在于,即使我们收到错误响应,此时获取response.codeafter_action),响应代码仍为2xx。我想这可能是因为服务器尚未遇到数据访问过程中可能遇到的任何问题。

如何正确存储发送的状态代码给用户?

1 个答案:

答案 0 :(得分:0)

rails日志已经存储了请求和响应。如果您只需要跟踪所有用户请求,只需将用户ID添加到日志中即可。除非有特定原因要将此数据保留在数据库中,否则会随着用户活动量呈指数级增长,请将其添加到config/application.rbconfig/environments/production.rb

MyAppName::Application.configure do
  #...whatever you already have in configs
  # then add the following line
  config.log_tags = [
          -> request { "user-#{request.cookie_jar.signed[:user_id]}" }
      ]
end

然后,您可以拖尾日志并使用grep,或编写其他一些进程来使用其他分析来解析日志。有许多工具可用于此类工作。但这是一个基本的例子

tail -f logs/production.log | grep user-101 
# this would show all log requests from user with id 101

如果您仍然需要此功能,您可能需要尝试prepend_after_action,请参阅

http://api.rubyonrails.org/classes/AbstractController/Callbacks/ClassMethods.html#method-i-prepend_after_action