Подтвердить что ты не робот

Трассировка Rails 3 SQL-запросов

Есть ли какой-либо камень, который работает на Rails 3, который может показать , какая часть моего кода сгенерировала SQL-запрос?

В Rails 2.3 появился плагин под названием query_trace, но он не работает на Rails 3, он генерирует следующую ошибку:

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

Ответ 1

QueryTrace не работает так, потому что многие изменения были внесены в Rails 3 esp в области ActiveRecord.

Итак, взломав, я сделал это так:

Вам нужно только два файла ниже в указанных местах. Затем перезапустите веб-сервер. После 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

Ответ 4

Здесь, похоже, есть хорошая развилка:

https://github.com/dolzenko/query_trace

Обратите внимание, что константа QUERY_TRACE в документации не работает, но QueryTrace.enable! (должен быть в инициализаторе, я попробовал сначала вставить его в config/development.rb)