Rails中的弃用警告5

时间:2016-10-06 13:10:59

标签: ruby-on-rails ruby-on-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_actionafter_filteralias_method_chain时,找不到它。我该怎么做才能摆脱这些警告?

2 个答案:

答案 0 :(得分:2)

为什么

我在最近的rails 5升级中遇到了alias_method_chain is deprecated ... from <top (required)> at /path/to/your/environment.rb。这通常指向在您的Rails应用程序initialize!调用期间所需的gem中的使用,或者如果您手动要求您的依赖项(我碰巧是),则使用Bundler.require

它可能更好地表达为:

  

在Rails初始化时,你所依赖的随机Gems之一做了我不喜欢的事情。找到它真有趣!

如何修复它(可能)

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

  1. 找到你的宝石路径
    • 您通常可以使用bundle show rails$GEM_PATH的父目录来确定当前捆绑的宝石所在的位置(请注意,对于来自不同来源的宝石,这可能会有所不同,例如git依赖项存储的方式与来自rubygems的存储方式不同)
  2. 使用您喜欢的文字搜索工具(grepripgrip ag)搜索已弃用的方法名称,例如rg "alias_method_chain" <gem path>
  3. 升级或删除该gem以查看弃用是否消失
  4. 希望它能做到!
  5. 就我而言,alias_method_chain的弃用警告是Kaminari的过时版本。我更新了我的Gemfile以允许更新版本,然后运行bundle update kaminari对其进行排序。

    An Aside

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

答案 1 :(得分:0)

我最近遇到了同样的错误。创建新的Rails 5应用程序大约2分钟后出现此错误。当我遇到同样的错误时,我几乎没有开始以下chartkick tutorial

操作顺序

  1. rails g model访问国家:字符串visited_at:datetime load_time:decimal
  2. rake db:migrate
  3. BOOM!收到同样的错误&amp;它不会让我继续制作我的架构。
  4. 错误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 richOnRails/chartkick/config/application.rb:7) rake aborted!

    错误消息提到了 config / application.rb 第7行中的问题:

    require_relative 'boot'
    require 'rails/all'
    
    **Bundler.require(*Rails.groups)**
    module Chartkick
        class Application < Rails::Application
        end
    end
    

    第7行: Bundler.require(* Rails.groups) *用于区分第7行的星号。

    我没有看到第7行真正的错误。

    试图用以下命令解决它:

    • bundle exec rake db:migrate [得到同样的错误]

    • 捆绑更新

    最后,解决了部分问题,给出了错误 - 使用以下代码:

    bin/rake db:create

    rake db:migrate

    我仍然有相同的错误消息,但我现在可以使用&amp;访问我的数据库。错误显然仍然存在,但它不再妨碍我的进步。我还应该注意,我的新rails应用程序是使用postgresql作为默认数据库构建的。

    rails new chartkick --database=postgresql
    

    不确定这是否对您的情况有帮助,但它可能有助于其他人调试此问题。