Я хочу установить регистратор так, чтобы я мог вывести, все выполнили SQL моего приложения направляющих. Проблема, такой регистратор связан с AbstractAdapter, который инициализировал очень скоро под тестовым режимом и таким образом не может быть установлен моим кодом инициализатора. Я пытаюсь поместить
ActiveRecord::Base.logger = MyCustomLogger.new(STDOUT)
в конце environment.rb
как кто-то рекомендуемый, но это только работает, будучи выполненным в консольной среде (ударенный script/console
), не, когда выполнено под тестовым режимом. Интересно, существует ли какой-либо способ сконфигурировать такой регистратор так, чтобы я был убеждающийся быть вызванным под любой средой (тест, разработка, производство, консоль)
Насколько я могу найти, лучший способ - поместить такой код в папку инициализаторов. Таким образом, независимо от рабочей среды, регистратор всегда будет правильно установлен. И нет, на моем Mac OSX Rails 2.3.2 на Ruby 1.8.7, если я помещу ActiveRecord :: Base.logger = ...
в environment.rb, тогда регистратор не установлен должным образом, так как logger, который Sql Connection использовал для дампа SQL, был установлен и кэширован до этого.
В test/test_helper.rb, перед загрузкой config/environment.rb, добавьте:
RAILS_DEFAULT_LOGGER = MyCustomLogger.new(STDOUT)
Соответствующий код в railties для 2.3 railties/lib/initializer.rb#L35. Пока не знаю, как это сделать с Rails 3.0. Похоже, что вам нужно вызвать Rails#logger=, но я пока не могу найти подходящее место для этого.
Создание регистратора в config / environment.rb
должно работать. Я получаю журнал SQL на стандартный вывод, когда запускаю модульные тесты, если я помещаю следующую строку в config / environment.rb
или config / environment / test.rb
:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Есть ваш класс MyCustomLogger
делает что-нибудь особенное, что приводит к его сбою во время тестов? Будет ли лучше работать, если вы используете вместо него Logger.new (STDOUT)
?