21

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

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

4

2 回答 2

33

在 Rails 4 中,您可以使用

config.active_support.deprecation = :raise

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

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

于 2014-02-12T09:25:02.170 回答
12

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

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

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

更新:

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

这是他的代码:

# config/environments/test.rb
ActiveSupport::Deprecation.debug = true
于 2013-09-20T19:54:37.293 回答