卸载旧版本的Ruby宝石

415

我有几个版本的Ruby gem:

$ gem list
rjb (1.3.4, 1.3.3, 1.1.9)

如何删除旧版本但保留最新版本?

7个回答

736
# remove all old versions of the gem
gem cleanup rjb

# choose which ones you want to remove
gem uninstall rjb

# remove version 1.1.9 only
gem uninstall rjb --version 1.1.9

# remove all versions less than 1.3.4
gem uninstall rjb --version '<1.3.4'

1
注意,在最后一个命令中,“小于”运算符后必须加一个空格。 - Baurito

297

要删除所有已安装 gem 的旧版本,可以使用以下 2 条命令:

 gem cleanup --dryrun

以上命令将预览哪些 gem 将被移除。

 gem cleanup

上述命令实际上会将它们移除。


3
在我的Ubuntu Cloud9设置中无法工作...必须使用sudo运行。 - Mirv - Matt
3
截至当前版本的gem 3.2.15,我收到以下消息。 --dryrun选项已被弃用,并将在未来的Rubygems版本中删除。请改用--dry-run - Ahmed Mohamedeen
在Rails中,我必须在这两个命令之后运行bundle install来重新安装一些丢失的gem,例如puma。 - Asad Shakil

15

清除任何旧版 gem 的方法。

sudo gem cleanup

如果您只想看到将要被移除的列表,可以使用以下命令:

sudo gem cleanup -d

您还可以通过指定其名称来清理特定的宝石:

sudo gem cleanup gemname

仅针对删除特定版本,例如1.1.9

gem uninstall gemname --version 1.1.9

如果您在安装gem时仍然遇到某些异常,例如:

无效的gem:软件包已损坏,在验证时发生异常:/home/rails/.rvm/gems/ruby-2.1.1@project/cache/nokogiri-1.6.6.2.gem中的nil:NilClass没有“size”方法(NoMethodError)

那么,您可以从缓存中将其删除:

rm /home/rails/.rvm/gems/ruby-2.1.1@project/cache/nokogiri-1.6.6.2.gem

更多详细信息请参见:

http://blog.grepruby.com/2015/04/way-to-clean-up-gem-or-remove-old.html


3
你可能不应该使用 sudo - Paul Danelli

13
尝试类似这样的操作:gem uninstall rjb --version 1.3.4

1
问题是:“如何删除旧版本但保留最新版本?”而这个回答将会删除最新版本。 - austinheiman

9

gem cleanup 使用系统命令。已安装的 gem 只是文件系统中的目录。如果您想要批量删除,请使用 rm -R

  1. 运行 gem environment 命令,并注意 GEM PATHS 的值
  2. 使用 cd <your-gem-paths>/gems 命令进入该路径下的 gems 目录
  3. 运行 ls -1 |grep rjb- |xargs rm -R 命令以批量删除 rjb gem 包

3
安装的 gem 只是文件系统中的目录。好的,知道了,谢谢。 - philant

1

您可能需要设置GEM_HOME才能使清理工作正常运行。您可以通过运行以下命令来检查gem文件的路径:

gem env

请注意GEM PATHS部分。

例如,在我的情况下,gem安装在我的用户主目录中:

export GEM_HOME="~/.gem/ruby/2.4.0"
gem cleanup

-1
bundler clean

在我尝试了以上所有步骤后,最后一步是停止显示该消息。


这并没有真正回答问题:如果Bundler没有安装或者没有bundle文件怎么办? - the Tin Man

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