ruby-on-rails - 发送后访问响应状态
问题描述
我正在开发一种功能来存储对我的应用程序中特定端点发出的请求。
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.code
此时的 ( after_action
) 时,响应码仍然是 2xx。我想这可能是因为服务器还没有遇到在数据访问过程中可能遇到的任何问题。
如何正确存储实际发送给用户的状态代码?
解决方案
rails 日志已经存储了请求和响应。如果您只需要跟踪所有用户请求,您可以简单地将用户 ID 添加到您的日志中。除非有特定原因将这些数据保存在数据库中,否则数据库会随着用户活动的数量呈指数增长,否则将其添加到config/application.rb
或config/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
,请参阅
推荐阅读
- python - 尝试复制 Python 结果时出现 Keras 错误
- angular - Angular Service Worker 未在数据组数组中缓存 api
- python - Python3 - 关于同一属性的多次验证的说明
- wordpress - wordpress 用随机字符替换单引号
- c# - DatabaseGeneratedOption.None 作为外键
- c# - EF Core 2.1 在简单查询中使用两个 Include() 语句导致性能下降
- python-3.x - 在输入中查找给定数字的平均值
- php - Laravel:根据日期从数据库中获取 n 个模型实例
- reactjs - 这两种rootSaga config有什么区别
- python - 使用 Selenium Python 查找元素