我想为活动记录发送的每个请求添加注释,以便在mysql慢查询中找到源代码。如何在ActiveRecord发送之前修改请求?
例如,我希望在我的中心mysql慢查询日志中有这个。
SELECT * FROM articles
-- File: refresh-article.rb
答案 0 :(得分:3)
ActiveRecord已将带有时间信息的数据库请求记录到您的应用程序日志中。
答案 1 :(得分:0)
在您的rails应用中,您可以在log/(production|development).log
中查看您的查询。
但是,如果您想要更多内容,我建议您查看NewRelic in development mode。它是免费的,它显示了执行查询的位置(看起来像你想要的)。它确实是最好的日志/性能分析器之一。
答案 2 :(得分:0)
我找到了一个猴子补丁MySQL2 :: execute
的解决方案答案 3 :(得分:0)
我用猴子补丁解决了这个问题
ActiveRecord::ConnectionAdapters::Mysql2Adapter.class_eval do
def execute_with_log(sql, name=nil)
sql = "-- Script: #{$0}\n#{sql}"
execute_without_log(sql, name)
end
alias_method_chain :execute, :log
end
答案 4 :(得分:0)
ActiveRecord 6 允许对查询进行注释
caller_locations
https://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-annotate
您可以将其与 User.annotate("#{caller_locations(1,1).first}").select(:name)
内核方法结合使用:
{{1}}
https://www.rubydoc.info/stdlib/core/2.0.0/Kernel:caller_locations