如何在升级到rubygems 1.8.x后使`gem`正常工作?

5
我使用gem upgrade --system将RubyGems从1.7.2升级到1.8.1,然后立即按Eric Hodel's blog的建议运行gem pristine --all --no-extensions。在运行gem命令时出现错误,我通过谷歌搜索找到了一些建议,要求用gem uninstall卸载带有不推荐警告的gems,但随后发现无法进行卸载,因为gem uninstall会报错,包括其他任何命令,甚至是普通的gem命令也是如此。

当我运行任何这些命令时,仍会收到一堆“已弃用”的警告,然后是这个回溯:

/Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:277:in `block in _resort!': undefined method `name' for nil:NilClass (NoMethodError)
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:276:in `sort!'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:276:in `_resort!'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:270:in `_all'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:402:in `each'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:477:in `map'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:477:in `find_files'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:1061:in `load_plugins'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:85:in `<top (required)>'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/bin/gem:9:in `<main>'

尝试使用相同的更新命令从RubyGems 1.6.2升级后,再次出现了同样的问题。第三次尝试时,我使用下面的建议执行gem install rubygems-update && update_rubygems,但安装失败,仍然使用可用的RubyGems 1.6.2。
我想要a)使用RubyGems 1.8.x,b)撤消这些更改,而不是必须再次删除我的1.9.2安装程序。有什么想法吗?我正在运行:
- rvm 1.6.5 - MRI 1.9.2
RubyGems环境: - RUBYGEMS版本: 1.6.2 - RUBY版本: 1.9.2 (2011-02-18 patchlevel 180) [x86_64-darwin10.7.0] - 安装目录: /Users/sloveless/.rvm/gems/ruby-1.9.2-p180 - RUBY可执行文件: /Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/bin/ruby - 可执行文件目录: /Users/sloveless/.rvm/gems/ruby-1.9.2-p180/bin - RUBYGEMS平台: - ruby - x86_64-darwin-10 - GEM路径: - /Users/sloveless/.rvm/gems/ruby-1.9.2-p180 - /Users/sloveless/.rvm/gems/ruby-1.9.2-p180@global - GEM配置: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - :sources => ["http://rubygems.org"] - 远程资源: - http://rubygems.org

顺便提一下,就在今天(5月10日),RubyGems错误库中也记录了一个类似的错误,并且我在那里添加了类似的信息,这里


which gem 告诉你什么? - the Tin Man
/Users/sloveless/.rvm/rubies/ruby-1.9.2-p180/bin/gem - turboladen
非常感谢您的帮助 - 我不得不重新安装,结果得到了一个新版本的rubygems,一切都乱了。这很有帮助! - Jamie Penney
3个回答

5

我曾遇到过gems 1.{7..8}.*的问题。

以下是我们的生产环境堆栈:

  • MRI 1.9.2和JRuby 1.6.1
  • RVM 1.6.5
  • Gems 1.6.2

不要升级gems本身,否则可能会出现问题。我知道使用最新版本很诱人,但这更像是在手术室的墙上大量出血。

如果你一定要升级:

  • 仅限当前用户(更常见):gem install rubygems-update -v 1.6.2 && update_rubygems
  • 系统范围内(谨慎):sudo gem install rubygems-update -v 1.6.2 && sudo update_rubygems

如果使用RVM,请确保先执行rvm gemset global

通常的警告适用,例如备份数据、gemsets和应用程序,并且不要在生产环境中尝试这样做。 :)


1
谢谢...我降级到了1.6.2版本,现在生活好多了。我使用了这个命令:"gem update --system 1.6.2"。 - llimllib
很棒的比喻。 :) 顺便说一下,我尝试使用你建议的 rubygems-update 方法进行升级,但也失败了——不过好在我还是有一个可用的 gem 命令,而不像其他方法那样完全无法使用。我想现在我暂时只能停留在1.6.2版本了... - turboladen
我的其中一台机器正在运行1.3.7版本,而且它表现得非常完美。非常感谢你找出了哪个版本可用。 - Jamie Penney
就我个人而言,1.6.2 版本之前的稳定性还是不错的。我在使用 1.7.2 版本时也取得了不错的成果,但是我的同事们似乎没有那么顺利,仍然停留在 1.6.2 版本。 - turboladen
1
降级是一个好的建议,至少现在是这样。请查看此错误报告以获取更多详细信息...如果您希望我的补丁被接受,请留下支持性评论。https://rubyforge.org/tracker/?func=detail&atid=575&aid=29176&group_id=126 - AlexChaffee
挖掘一下旧线程:我认为Ruby Gems现在更加成熟了。在测试环境中小心升级,等等。 - user246672

0

它与RVM没有关联,因为我正在运行相同的版本。也不是Ruby 1.9.2,因为我正在运行相同的版本。

gem uninstall ... 返回错误并不正常。我已在几台运行RVM和1.9.2的机器上执行了升级,并且gem本身继续正确运行。是的,我看到了废弃警告。

你可能使用sudo运行gem update吗?这可能会导致破坏,因为您正在RVM下运行,而sudo是一个大忌。


有趣。我想这不是正常的,因为我没有找到其他人说类似的话。我肯定没有使用 sudo 运行 - 我已经使用 RVM 很长时间了,所以我完全没有这个习惯。 :) - turboladen

0

嗯...我在更新rubygems并执行gem pristine --all --no-extensions后遇到了与您相同的错误。然而,我不理解使用sudo进行gem安装和更新的主要禁忌,所以我有其他问题需要清理。但是,这是我恢复工作安装的方法:

我通过进行全新安装来更新rvm:http://beginrescueend.com/rvm/install/

由于我的sudo方式,我在此步骤中遇到了一些其他权限问题,但已经解决。我必须打开一个新的终端会话才能使更改生效。

然后,按照此处描述的方式执行$ rvm rubygems current: http://beginrescueend.com/rubies/rubygems/

这将安装版本1.6.2。到目前为止,我似乎又有了一个可用的gem命令,并且我的弃用警告已经消失了。希望它有所帮助。


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