Last active
June 27, 2016 01:14
-
-
Save sshaw/05d8bdf99e4175816db858323fb2169c to your computer and use it in GitHub Desktop.
Make debugging a bit easier by determining the source of ActiveRecord queries. The source of queries will be output via logger.debug().
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Make debugging a bit easier by determining the source of ActiveRecord queries. | |
# The source of queries will be output via logger.debug(). | |
# | |
# By: Skye Shaw (https://github.com/sshaw) | |
# Date: 2014-10-24 | |
# Source: https://gist.github.com/sshaw/05d8bdf99e4175816db858323fb2169c | |
# | |
# === Usage | |
# | |
# # ActiveSupport::BacktraceCleaner | |
# QuerySource::STACK_CLEANER.add_silencer { |line| line =~ /foo/ } | |
# | |
# # Trace all User queries | |
# User.extend QuerySource | |
# | |
# # Trace all ActiveRecord queries | |
# ActiveRecord::Base.extend QuerySource | |
# | |
module QuerySource | |
START_TRACE_MARKER = " Begin Query Trace ".center(50, "=").freeze | |
END_TRACE_MARKER = " End Query Trace ".center(50, "=").freeze | |
STACK_CLEANER = if defined?(Rails) | |
Rails.backtrace_cleaner | |
else | |
require "active_support/backtrace_cleaner" | |
cleaner = ActiveSupport::BacktraceCleaner.new | |
cleaner.add_silencer { |line| line =~ %r(/gems/) } | |
end | |
def find_by_sql(req, sql) | |
return super unless logger.debug? | |
trace = STACK_CLEANER.clean(caller) | |
return super unless trace.any? | |
logger.debug(START_TRACE_MARKER) | |
result = super | |
logger.debug(trace.join("\n")) | |
logger.debug(END_TRACE_MARKER) | |
result | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment