Я занимаюсь разработкой приложения с использованием 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