从rails3项目中卸载gem的最佳方法是什么?

时间:2011-01-12 09:34:55

标签: ruby-on-rails-3 uninstall bundler

我通过Gemfile使用bundler安装了所有宝石。我(错误地)认为如果我从我的Gemfile中删除了一个gem并运行'bundle install',那么将删除已删除的gem。我查看了捆绑器帮助文件,据我所知,它没有办法卸载宝石。

我只是使用gem uninstall x来做所有事情吗?这会混淆捆绑者吗?

7 个答案:

答案 0 :(得分:132)

Bundler是从你的应用程序的根目录启动的,所以它确保所有需要的宝石都可以让你的应用程序正常工作。如果由于某种原因你不再需要宝石,你将不得不运行

    gem uninstall gem_name 

如上所述。所以每次运行bundler都会重新检查依赖项

编辑 - 2014年12月24日

我看到人们不断回答这个问题我决定添加一些东西。 我给出的答案就是你保持全球宝石的情况。考虑使用诸如rbenv或rvm之类的gem管理器来保存作用于特定项目的宝石集。

这意味着在全局级别不会安装任何gem,因此当您从项目的Gemfile中删除一个Gemfile并重新运行bundle时,它显然不会加载到您的项目中。然后,您可以运行bundle clean(使用项目目录),它将从系统中删除所有那些曾经从您的Gemfile(在同一目录中)安装的gem,但在此给定时间不再列在那里....长话短说 - 它删除了未使用的宝石。

答案 1 :(得分:96)

这将卸载由bundler安装的gem:

bundle exec gem uninstall GEM_NAME

请注意,这会抛出

  

错误:执行gem时...(NoMethodError)未定义方法`delete'for#< Bundler :: SpecSet:0x00000101142268>

但实际上已删除了宝石。下次运行bundle install时,将重新安装gem。

答案 2 :(得分:21)

使用较新版本的bundler,您可以使用清洁任务:

$ bundle help clean
Usage:
    bundle clean

Options:
    [--dry-run=only print out changes, do not actually clean gems]
    [--force=forces clean even if --path is not set]
    [--no-color=Disable colorization in output]
    -V, [--verbose=Enable verbose output mode]

Cleans up unused gems in your bundler directory
$ bundle clean --dry-run --force
Would have removed actionmailer (3.1.12)
Would have removed actionmailer (3.2.0.rc2)
Would have removed actionpack (3.1.12)
Would have removed actionpack (3.2.0.rc2)
Would have removed activemodel (3.1.12)
...

编辑:

如果您使用全局gemset(即 - 您的所有项目都将其宝石保存在同一位置),则不建议这样做。 但是,几乎没有办法让每个项目的宝石分开:

  1. rvm gemsets(http://rvm.io/gemsets/basics
  2. bundle install,并提供以下任一选项:--deployment--path=<path>http://bundler.io/v1.3/man/bundle-install.1.html

答案 3 :(得分:1)

您必须使用'gem uninstall gem_name'来卸载gem。

请注意,如果您在系统范围内安装了gem(即sudo bundle install),那么您可能需要使用-n选项指定二进制目录,以确保删除属于gem的二进制文件。例如

sudo gem uninstall gem_name  -n /usr/lib/ruby/gems/1.9.1/bin

答案 4 :(得分:1)

我好像通过bundler手动删除unicorn gem(“sudo bundler exec gem uninstall unicorn”)来解决这个问题,然后重新绑定(“sudo bundle install”)。

不确定为什么会发生这种情况,尽管上述修复确实有效。

答案 5 :(得分:1)

如果你想清理所有宝石并重新开始

sudo gem clean

答案 6 :(得分:0)

捆绑器现在有一个bundle remove GEM_NAME命令(自v1.17.0, 25 October 2018起)。