Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tracing Rails 3 SQL queries

Is there any gem which works on Rails 3 that can show which part of my code generated which SQL query?

On Rails 2.3 there was plugin called query_trace, but it doesn't seem to work on Rails 3, it generates following error:

alias_method': undefined method `log_info' for class `ActiveRecord::ConnectionAdapters::AbstractAdapter' (NameError)
like image 237
spacemonkey Avatar asked Dec 25 '10 16:12

spacemonkey


2 Answers

QueryTrace doesn't work as-is because many changes were made in Rails 3 esp in the area of ActiveRecord.

So, hacking around, I made it work like this:

You just need the 2 files below in the locations mentioned. Then restart the web server. After the SQL, you should see Called from: in a console (magenta on white) and log file

In /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

In /vendor/plugins/query_trace/init.rb

require 'query_trace'

class ::ActiveRecord::LogSubscriber
  include QueryTrace
end
like image 138
Zabba Avatar answered Sep 20 '22 13:09

Zabba


https://github.com/lightyear/sql-logging

like image 43
Bryan Larsen Avatar answered Sep 19 '22 13:09

Bryan Larsen