【问题标题】:How to handle deprecated gem warning (SourceIndex#all_gems)? [duplicate]如何处理弃用的 gem 警告 (SourceIndex#all_gems)? [复制]
【发布时间】:2011-05-04 15:56:17
【问题描述】:

今天运行bundle update后收到此消息:

$ bundle update
NOTE: Gem::SourceIndex#all_gems is deprecated with no replacement. It will be removed on or after 2011-10-01.
Gem::SourceIndex#all_gems called from /Users/meltemi/.rvm/gems/ruby-1.9.2-p180@ppr3/gems/bundler-1.0.13/lib/bundler/rubygems_integration.rb:256
.

有人知道这是什么意思以及如何解决吗?

注意:这是 Rails 3.0.7 环境

【问题讨论】:

    标签: ruby-on-rails rubygems deprecated


    【解决方案1】:

    当我升级到 ruby​​gems 1.8.0 时,我在非 Rails 环境中的一堆 gem 遇到了同样的错误。每当需要 ruby​​gems 时,我都会收到警告。环顾'Net,似乎rubygems 1.7.x也可能存在问题,但我从未安装过其中一个版本,所以我不确定。我通过运行解决了这个问题:

    gem pristine --all --no-extensions
    

    我不得不运行它几次 - 它不断出错(但通常不会在同一位置运行)。最终它发展到足以解决我的大部分宝石。

    有一些 gem 没有正确重新生成它们的规范(json 和续集,特别是在我的情况下),因为它们需要构建扩展。 (gem 命令输出表明它正在跳过它们,尽管在所有弃用警告中很容易错过该消息。)对于这些 gem,我卸载了它们,然后再次重新安装它们(它们以前由 bundler 在 ruby​​gems 1.5 中安装.x) 并修复了剩余的警告。可能我本来可以从那个攻击计划开始,但我没有尝试。

    【讨论】:

    • 你的回答让我想到了我的……我的问题是双重的:有一些坏的 gem 必须卸载并重新安装(mysql2、json 和 nokogiri)。并且还必须在 Bundler 所在的 global gemset 上运行您的 gem pristine --all --no-extensions。现在一切都很好......谢谢!
    • 我在 rake 上有这个错误,我似乎无法通过卸载 rake 并重新安装来修复它
    • 抱歉 - 不知道。我自己安装了 rake 0.8.7,并且没有任何问题,与 RubyGems 是否相关。
    • 我在使用 ruby​​gems 1.7.x 并且不断收到此错误。升级到 1.8.1 (gem update --system) 并清除它。
    • 在这里我认为用锤子反复敲打同样的东西 - 在软件中从来没有用过......我错了;-)
    【解决方案2】:

    它是从 Bundler gem 中调用的。尝试更新 bundler 看看是否有帮助

    sudo gem update bundler
    

    【讨论】:

    • 已将 Bundler 更新为 1.0.13(之前位于 1.0.12),但警告仍然存在......几乎所有内容之前都会出现相同的弃用警告(bundle show...rake routesrails s、等等...)
    • 具有讽刺意味的是,警告来自处理旧版本 Gem 的实现。
    • 这个对我有用...现在在 bundler 1.1.0
    【解决方案3】:

    Pry gem 直接使用 ruby​​gems API,不幸的是,不能通过运行 gem pristine --all 来修复。

    我分叉了 Pry gem 并使用未弃用的 API 调用添加了修复程序。等待合并到 master,这里是 fork:https://github.com/dvdplm/pry

    【讨论】:

      【解决方案4】:

      我将 bundler('gem update bundler')从 1.0.12 更新到了 1.0.15。现在一切都很好。

      【讨论】:

        【解决方案5】:

        引用:

        据我所知,来源:
        只需修补 ruby​​gems_integration.rb,第 256 行:
        - Gem.source_index.all_gems.values
        + Gem.source_index.gems.values
        原因:
        Gem::SourceIndex#all_gems 刚刚返回 @gems,现在有一个 @gems 的 attr_reader。我认为这是删除 all_gems 方法。

        来源:ruby-forum.com

        【讨论】:

        • 修补你的 gem 不会很好,因为你必须在每个受此影响的系统上修补它。对于一些可能是数十甚至数百。
        【解决方案6】:

        我通过 RVM 删除并重新安装了 ruby​​ 1.9.2,然后卸载了所有 gem:

        gem list --no-versions
        

        将结果放入名为gems 的文件中(删除错误消息)。然后做:

        GEMS=`cat gems`
        for x in $GEMS ; do gem uninstall $x -aIx; done
        

        之后我就可以运行其他人建议的原始命令了:

        gem pristine --all --no-extensions
        

        那是错误消失的时候。

        【讨论】:

        • 如果你想更快地做到这一点...gem list --no-versions | xargs gem uninstall -aIx 然后运行gem pristine --all --no-extensions
        【解决方案7】:

        Bundler 1.0.13(2011 年 5 月 4 日发布的版本)与 rubygems 1.7.2 一起运行会发出这个恼人的弃用警告:

        注意:Gem::SourceIndex#all_gems 已被弃用,没有替代品。它将在 2011 年 10 月 1 日或之后删除。 从 /Users/me/.rvm/gems/ruby-1.9.2-p180@composer/gems/bundler-1.0.13/lib/bundler/rubygems_integration.rb:256 调用的 Gem::SourceIndex#all_gems

        2011 年 5 月 11 日在 Bundler 存储库 to correct an issue 中提交的 fix was committed 于 2011 年 5 月 6 日提交。

        Bundler 1.1 待发布,您可以试试这个解决方案:

        $ gem 卸载捆绑器

        $ gem install bundler --version=1.0.12

        我希望这会有所帮助。挖了好久才找到。

        【讨论】:

        • Bundler 1.0.14 已经发布并修复了这个问题。
        猜你喜欢
        • 2019-04-19
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多