如何处理已弃用的 gem 警告(SourceIndex#all_gems)?

15

运行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环境。

7个回答

6

当我升级到rubygems 1.8.0时,在非Rails环境下,我的一堆gem都出现了相同的错误。每次需要引用rubygems时,都有警告出现。在网上搜索后,似乎rubygems 1.7.x也可能存在这个问题,但我从未安装过这些版本,所以不确定。我通过运行以下命令来解决这个问题:

gem pristine --all --no-extensions

我不得不多次运行它 - 它一直出错(但通常不在同一处从一个运行到另一个运行)。最终,它足够远,已经解决了大部分我的 gem 问题。
有一些 gem 没有正确地重新生成其规范(特别是在我的情况下是 json 和 sequel),因为它们需要构建扩展程序。(gem 命令输出表明它正在跳过它们,尽管在所有弃用警告中很容易错过这个消息。)对于这些 gem,我卸载了它们,然后再次安装它们(它们以前是由 bundler 在 rubygems 1.5.x 中安装的),这解决了剩余的警告。也许我本来可以从最初的攻击计划开始,但我没有尝试。

你的回答启发了我,我的问题有两个方面:首先,我需要卸载并重新安装一些有问题的 gem(mysql2、json 和 nokogiri)。其次,我需要在 全局 gemset 上运行 gem pristine --all --no-extensions 命令,以确保 Bundler 正常工作。现在一切都好了,谢谢! - Meltemi
我在运行rake时遇到了这个错误,卸载并重新安装rake似乎无法解决它。 - Aaron Qian
抱歉 - 我不知道。我自己安装了 rake 0.8.7,与 RubyGems 相关或不相关都没有问题。 - Andy Tinkham
我使用的是 RubyGems 1.7.x,经常遇到这个错误。升级到了1.8.1版本(gem update --system),问题得到了解决。 - lambinator
我曾经认为在软件开发中,一遍又一遍地用锤子敲同一个东西是毫无用处的...但我错了;-) - PandaWood

5

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

sudo gem update bundler

将Bundler更新到1.0.13(之前是1.0.12),但警告仍然存在... 几乎在任何地方都会出现相同的弃用警告(bundle show...rake routesrails s等)。 - Meltemi
具有讽刺意味的是,警告来自于处理 Gem 旧版本的实现。 - tadman
这个对我有效...现在使用的是bundler 1.1.0。 - Artilheiro

1

我将bundler('gem update bundler')从1.0.12更新到1.0.15。现在一切正常。


1

Pry gem 直接使用 rubygems API,无法通过运行 gem pristine --all 来修复。

我 fork 了 Pry gem 并使用非废弃的 API 调用添加了修复。在合并到主分支之前,这里是 fork 的链接:https://github.com/dvdplm/pry


0

Bundler 1.0.13(版本发布于2011年5月4日),运行时使用rubygems 1.7.2,会出现这个令人烦恼的弃用警告:

注意:Gem::SourceIndex#all_gems已被弃用,没有替代方法。将在2011-10-01或之后删除。 Gem::SourceIndex#all_gems被调用自/Users/me/.rvm/gems/ruby-1.9.2-p180@composer/gems/bundler-1.0.13/lib/bundler/rubygems_integration.rb:256

在Bundler repo中提交了一个修复,日期为5/11/2011,以纠正于5/6/2011提交的问题。

在Bundler 1.1发布之前,您可以尝试此解决方案:

$ gem uninstall bundler

$ gem install bundler --version=1.0.12

希望这能帮到你。花了些功夫才找到它。


Bundler 1.0.14已经发布并修复了此问题。 - sj26

0

引用:

从源代码中我看到:
只需修补rubygems_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


修补你的宝石并不会很有效,因为你必须在每个受影响的系统上都进行修补。对于一些系统来说,这可能是数十甚至数百个。 - tadman

0

我通过RVM删除并重新安装了Ruby 1.9.2,然后卸载了所有的gems:

gem list --no-versions

将结果放入名为gems的文件中(剪切错误消息)。然后执行:

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

之后,我能够运行其他人建议的 pristine 命令:

gem pristine --all --no-extensions

这时错误就消失了。


1
如果您想更快地执行此操作....请键入 gem list --no-versions | xargs gem uninstall -aIx 然后运行 gem pristine --all --no-extensions - ocodo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接