Ruby on rails 如何配置Rails在遇到弃用警告时引发错误?

Ruby on rails 如何配置Rails在遇到弃用警告时引发错误?,ruby-on-rails,ruby-on-rails-3,rspec,deprecated,Ruby On Rails,Ruby On Rails 3,Rspec,Deprecated,我正在将一个相当大的应用程序从Rails 3.0升级到3.2,并试图消除所有的弃用警告。我的问题不是改变什么来解决特定的警告,而是如何让Rails像对待异常一样对待它们,这样它将在开发模式下转储堆栈跟踪,这样我就有了完整的堆栈跟踪,以查看违规代码的来源。这样,我就可以使用我的测试套件找到它们,并验证它们是否都已清理。如果有一种方法可以让rspec在记录了弃用警告的情况下使测试失败,那么这种方法也可以 (如果有人想知道,我之所以不升级到rails 4.0,是因为该应用依赖于一些AFAIK尚未完全准

我正在将一个相当大的应用程序从Rails 3.0升级到3.2,并试图消除所有的弃用警告。我的问题不是改变什么来解决特定的警告,而是如何让Rails像对待异常一样对待它们,这样它将在开发模式下转储堆栈跟踪,这样我就有了完整的堆栈跟踪,以查看违规代码的来源。这样,我就可以使用我的测试套件找到它们,并验证它们是否都已清理。如果有一种方法可以让rspec在记录了弃用警告的情况下使测试失败,那么这种方法也可以


(如果有人想知道,我之所以不升级到rails 4.0,是因为该应用依赖于一些AFAIK尚未完全准备好用于rails 4的gem,特别是activerecord-oracle\u enhanced-adapter。)

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

ActiveSupport::Deprecation.warn("some message")
没有抛出错误。为了回答您的问题,恐怕您必须使用猴子补丁的黑暗工具:)无论如何,解决方案是临时使用的,稍后将被删除

更新:

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

这是他的密码:

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

在Rails 4中,您可以使用

config.active_support.deprecation = :raise
test.rb
development.rb
文件中


其他可用的方法可以在

中找到,谢谢,这为我指明了正确的方向,并从技术上回答了我的问题。最后,我真正需要的只是在config/environments/test.rb中添加一行代码:ActiveSupport::Deprecation.debug=true@sockmonk,很好的发现,非常有用!