Как стереть SQL-запросы из ActiveRecord :: Base.logger - PullRequest
0 голосов
/ 11 ноября 2009

Я занимаюсь разработкой приложения с использованием Ruby on Rails.

Я хотел бы стирать старые запросы в объекте ActiveRecord :: Base.logger каждый раз, когда я вызываю новое действие, в основном, где ENV = production.

Цель состоит не в том, чтобы стереть все запросы, как при использовании config.log_level: info. Мне нужны только последние запросы, чтобы создать файл с этими запросами.

Вот код:

в библиотеке:

module SqlHunter
  class ActiveRecord::ConnectionAdapters::AbstractAdapter
      @@queries = [] # without this line it work perfectly
      @@logging = false
      cattr_accessor :queries, :logging
      def log_info_with_trace(sql, name, runtime) 
        @@queries << sql if @@logging 
      end
      alias_method_chain :log_info, :trace
  end
end

в контроллере (действие отчета)

ActiveRecord::ConnectionAdapters::AbstractAdapter::logging = true

.....

sqlfile = File.open("public/advancedStats/#{@dir_name}/advancedStatQuery.sql", 'w')
@queries = ActiveRecord::ConnectionAdapters::AbstractAdapter::queries
for query in @queries do
   sqlfile.write("#{query} \n")
end
sqlfile.close

Я задал старый связанный вопрос здесь

текст ссылки

Спасибо Támás Mezei и Damien MATHIEU за их последний ответ

Mondher

1 Ответ

1 голос
/ 11 ноября 2009

Итак, вы хотите отфильтровать SQL-запросы в производственном режиме или я упускаю суть?

Если речь идет только о фильтрации, режим prod автоматически фильтрует SQL-запросы. Если вы хотите фильтровать при разработке, отредактируйте файл config / environment / development.rb и вставьте

config.log_level = :info

По сути, он будет фильтровать SQL со всеми остальными вещами, находящимися ниже уровня информации (отладка).

Если вам нужно более сложное решение, вы всегда можете расширить / переопределить класс AbstractAdapter в

RUBY_HOME/lib/gems/1.8/gems/activerecord-nnn/active_record/connection_adapters/abstract_adapter.rb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...