【问题标题】:Silencing Deprecation warnings in Rails 3在 Rails 3 中消除弃用警告
【发布时间】:2011-02-10 23:23:51
【问题描述】:

谁能告诉我如何在 Rails 3 中消除弃用警告?

我有几种情况会引发误报。即在 haml 中使用 -for 循环,以及来自 dynamic_form 插件的 f.error_messages。

谢谢

【问题讨论】:

  • 您要使所有弃用警告还是仅在选定代码块中的警告静音?
  • 最好只有我知道的代码片段是安全的,但无论哪种方式,如果我可以切换它会很好地消除一些日志噪音。

标签: ruby-on-rails ruby ruby-on-rails-3 warnings deprecated


【解决方案1】:

要消除所有弃用警告,您可以执行以下操作:

ActiveSupport::Deprecation.silenced = true

这可以放置在初始化程序或特定环境的环境文件中(例如,仅在生产环境中静音。)

或者对于特定的代码部分,将其包含在一个块中:

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

这适用于 Rails 3 和 4。

【讨论】:

  • 我还有一些很棒的黑色胶带,你可以把它放在你的机油灯上;)
【解决方案2】:

Ryan 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

【讨论】:

    【解决方案3】:

    接受的答案不适用于 Rails 3.2.12。将它放在 environment/production.rb 或初始化程序中仍然会输出警告。在初始化应用程序之前,我必须将它放在我的 config/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!
    

    【讨论】:

    • 感谢您的发布,与其他解决方案相比,这是唯一在 Rails 4 中有效的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多