Как отключить ведение журнала Rails SQL в тесте?

По какой-то причине (возможно, обновленный камень) Rails теперь регистрирует все мои SQL-команды. Я запускаю автотест, и они также подвергаются спаму во время тестов. Как отключить его?

Я попытался добавить это в config/environment/test.rb, но это не сработало. logger уже был nil.

# ActiveRecord::Base.logger = nil
# ActiveRecord::Base.logger.level = 1

Rails 4.0.0

Ответ 1

Хорошо, я нашел его. Это сработало:

config.after_initialize do
  ActiveRecord::Base.logger = nil
end

Ответ 2

Еще одна вещь, которую вы можете сделать, это вызвать этот код во время выполнения, он не обязательно должен находиться в файле конфигурации.

Например, если вы ввели свой конкретный тестовый пример

# test/functionals/application_controller_test.rb for example
ActiveRecord::Base.logger = nil

Он будет работать так же хорошо, и таким образом вы можете переключать его во время выполнения. Полезно, если вы хотите задушить несколько строк кода или блока.

Ответ 3

В случае, если кто-то хочет на самом деле выбить ведение журнала SQL-запросов (без изменения уровня ведения журнала и при ведении журнала с их AR-моделей):

Строка, которая записывает в журнал (в Rails 3.2.16, в любом случае), является вызовом "debug" в lib/active_record/log_subscriber.rb: 50.

Этот метод отладки определяется ActiveSupport:: LogSubscriber.

Итак, мы можем выбить журнал, перезаписав его так:

module ActiveSupport
  class LogSubscriber
    def debug(*args, &block)
    end
  end
end