一尘不染

跟踪Rails 3 SQL查询

sql

在Rails 3上有什么宝石可以显示 我的代码的哪一部分生成了哪个SQL查询 吗?

在Rails
2.3上有一个名为query_trace的插件,但是在Rails
3上似乎不起作用,它会产生以下错误:

alias_method': undefined method `log_info' for class `ActiveRecord::ConnectionAdapters::AbstractAdapter' (NameError)

阅读 147

收藏
2021-03-10

共1个答案

一尘不染

QueryTrace无法按原样工作,因为在ActiveRecord区域中的Rails 3 esp中进行了许多更改。

所以,我四处乱窜,使它像这样工作:

您只需要在提到的位置下面的2个文件。然后重新启动Web服务器。SQL之后,您应该Called from:在控制台中看到(白色洋红色)和日志文件

/vendor/plugins/query_trace/lib/query_trace.rb

module QueryTrace
  def self.append_features(klass)
    super
    klass.class_eval do
      unless method_defined?(:log_info_without_trace)
        alias_method :log_info_without_trace, :sql
        alias_method :sql, :log_info_with_trace
      end
    end
  end

  def log_info_with_trace(event)
    log_info_without_trace(event)
    logger.debug("\e[1m\e[35m\e[1m\e[47mCalled from:\e[0m " + clean_trace(caller[2..-2]).join("\n "))
  end

  def clean_trace(trace)
    Rails.respond_to?(:backtrace_cleaner) ?
      Rails.backtrace_cleaner.clean(trace) :
      trace
  end
end

/vendor/plugins/query_trace/init.rb

require 'query_trace'

class ::ActiveRecord::LogSubscriber
  include QueryTrace
end
2021-03-10