ruby-on-rails – Rails中的弃用警告5

每次执行测试时,我都会收到这些弃用警告:

DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super. (called from <top (required)> at /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)
DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super. (called from <top (required)> at /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from <top (required)> at /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)

当我检查config / environment.rb的第5行时,有以下代码:

Rails.application.initialize!

当我在我的仓库中搜索after_action,after_filter或alias_method_chain时,找不到它.我该怎么做才能摆脱这些警告?

最佳答案 为什么

我遇到alias_method_chain已弃用…来自< top(required)>在最近的rails 5升级中的/path/to/your/environment.rb.这通常指向初始化期间所需的gem中的使用!调用你的Rails应用程序或Bundler.require,如果你手动要求你的依赖(我碰巧是).

它可能更好地表达为:

One of the random Gems you depend on did something I didn’t like while Rails was initializing. Have fun finding it!

如何解决(也许)

这些是我为解决这些未知错误而采取的松散步骤:

>找到你的宝石路径

>您通常可以使用bundle show rails或$GEM_PATH的父目录来确定当前捆绑的宝石所在的位置(请注意,对于来自不同来源的宝石,这可能会有所不同,例如,git依赖项的存储方式与来自rubygems的宝石的存储方式不同) )

>使用您喜欢的文本搜索工具(grep,ripgrip ag)搜索已弃用的方法名称,例如rg“alias_method_chain”< gem path>
>升级或删除该gem以查看弃用是否消失
>希望它能做到!

在我的例子中,alias_method_chain的弃用警告是在Kaminari的过时版本.我更新了我的Gemfile以允许更新的版本,然后运行bundle update kaminari来对其进行排序.

一个旁白

忽略这些警告是一个非常糟糕的主意;如果它们没有立竿见影的效果,很容易让这样的小东西进入你的应用程序.这导致忽略警告或错误的行为正常化;这意味着您的应用程序中存在更多错误和不一致,并且有保证
 当您尝试升级到删除已弃用行为的rails版本时,会遇到错误的时间.如果您或您的团队立即建立了查找和修复这些错误的标准,那么当它们出现时很容易发现并解决实际问题.你未来的自我会感谢你:)

点赞