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

soc*_*onk 17 rspec ruby-on-rails deprecated ruby-on-rails-3

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

(如果有人想知道,我没有一直升级到rails 4.0的原因是该应用依赖于AFAIK还没有为rails 4做好充分准备的一些宝石,尤其是activerecord-oracle_enhanced-adapter.)

Wol*_*ang 26

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

config.active_support.deprecation = :raise
Run Code Online (Sandbox Code Playgroud)

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

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


Bil*_*han 10

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

ActiveSupport::Deprecation.warn("some message")
Run Code Online (Sandbox Code Playgroud)

没有抛出错误. 要回答你的问题,我担心你必须使用猴子修补的黑暗工具:)无论如何,解决方案是临时使用,并将在以后删除.

更新:

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

这是他的代码:

# config/environments/test.rb
ActiveSupport::Deprecation.debug = true
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这指出了我正确的方向,技术上确实回答了我的问题.最后,我真正需要获得堆栈跟踪的是在config/environments/test.rb中添加一行说:ActiveSupport :: Deprecation.debug = true (2认同)