如何配置Rails在遇到废弃警告时抛出错误?

21

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

(如果有人想知道,我之所以没有完全升级到Rails 4.0,是因为该应用程序依赖于一些我认为还没有完全准备好支持Rails 4.0的宝石,特别是activerecord-oracle_enhanced-adapter。)

2个回答

35

在 Rails 4 中,您可以使用配置

config.active_support.deprecation = :raise

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

其他可用的方法可以在ActiveSupport::Deprecation::Behavior中找到。


12

当一些代码想要显示过期警告时,ActiveSupport::Deprecation会处理这个警告。

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

没有错误抛出。为了回答你的问题,恐怕你必须使用猴子补丁的黑暗工具 :) 无论如何,这个解决方案只是暂时的,并且以后会被删除。

更新:

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

这是他的代码:

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

3
谢谢,这指引了我正确的方向并且回答了我的问题。最终,我只需要在config/environments/test.rb中添加一行代码:ActiveSupport::Deprecation.debug = true,就可以获取堆栈跟踪信息了。 - sockmonk
@sockmonk,发现得不错,非常有用! - Billy Chan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接