【问题标题】:How can I configure Rails to raise an error when it hits a deprecation warning?如何配置 Rails 在遇到弃用警告时引发错误?
【发布时间】:2013-09-26 05:42:26
【问题描述】:

我正在将一个相当大的应用程序从 Rails 3.0 升级到 3.2,并试图摆脱所有弃用警告。我的问题不是要改变什么来解决特定的警告,而是如何让 Rails 将它们视为异常,以便它将在开发模式下转储堆栈跟踪,因此我将获得完整的堆栈跟踪以查看有问题的代码在哪里来自(哪里。这样我就可以使用我的测试套件找到它们,并验证它们是否都已清理干净。如果有办法让 rspec 在记录弃用警告时使测试失败,那也可以。

(如果有人想知道,我没有一直升级到 rails 4.0 的原因是该应用程序依赖于一些 AFAIK 尚未完全准备好用于 rails 4 的 gem,尤其是 activerecord-oracle_enhanced-adapter。)

【问题讨论】:

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


    【解决方案1】:

    在 Rails 4 中,您可以使用

    进行配置
    config.active_support.deprecation = :raise
    

    在您的 test.rbdevelopment.rb 文件中。

    其他可用的方法可以在ActiveSupport::Deprecation::Behaviour找到

    【讨论】:

      【解决方案2】:

      弃用警告由 ActiveSupport::Deprecation 处理,当某些代码想要显示此类警告时,它会调用

      ActiveSupport::Deprecation.warn("some message")
      

      没有抛出错误。 要回答您的问题,恐怕您必须使用猴子修补的黑暗工具:) 无论如何,该解决方案是临时使用的,稍后将被删除。

      更新:

      OP 在评论中指出了一种快速合法的方法,因此猴子补丁不再是一种选择。

      这是他的代码:

      # config/environments/test.rb
      ActiveSupport::Deprecation.debug = true
      

      【讨论】:

      • 谢谢,这为我指明了正确的方向,并且在技术上确实回答了我的问题。最后,我真正需要获取堆栈跟踪的只是在 config/environments/test.rb 中添加一行:ActiveSupport::Deprecation.debug = true
      • @sockmonk,很好的发现,非常有用!
      猜你喜欢
      • 1970-01-01
      • 2012-08-02
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多