2010-04-22 4 views
24

Может ли кто-нибудь сказать мне, как заставить замолчать изнурительные войн в Rails 3?Молчание Предупреждения об изъятиях в Rails 3

У меня есть несколько ситуаций, когда он бросает ложные срабатывания. А именно использование - для циклов в haml и f.error_messages из плагина dynamic_form.

Благодаря

+0

Вы хотите, чтобы заставить замолчать ** все ** предупреждения устаревания или просто предупреждение в выбранных блоках коды? – mikej

+0

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

ответ

54

Чтобы отключить все предупреждения устаревания вы можете сделать:

ActiveSupport::Deprecation.silenced = true 

Это может быть помещен в инициализаторе или в файле среды для конкретной среды (например, заставить замолчать только в производстве, например, .)

Или для определенного участка кода, заключите его в блоке:

ActiveSupport::Deprecation.silence do 
    # no warnings for any use of deprecated methods here 
end 

Это работает для обоих Rails 3 & 4.

+0

оба работают, лечу, спасибо :) – sfusion

+6

У меня также есть отличная черная клейкая лента, которую вы можете наложить на свет вашего моторного масла;) –

7

Райан Daigle написал статью об этом, в которой он также показал, как можно перехватить предупреждение устаревания и сделать что-то еще с ним, как отправить его в лог-файл:

ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| MyLogger.warn(msg) } 

http://ryandaigle.com/articles/2006/12/4/how-to-turn-deprecation-warnings-off-in-rails

11

Принятый ответ не работает для меня с Rails 3.2.12. Размещение в среде/production.rb или инициализаторе все же выдавало предупреждения. Я должен был поместить его в моем конфигурационном файле/environment.rb перед приложением инициализации:

# Load the rails application 
require File.expand_path('../application', __FILE__) 

::ActiveSupport::Deprecation.silenced = true if Rails.env.production? 

# Initialize the rails application 
Notices::Application.initialize! 
+0

спасибо за сообщение, по сравнению с другими решениями, это единственное, что работало в Rails 4 –