Answers:
Bundler是从应用程序的根目录启动的,因此可以确保存在所有必需的gem才能使应用程序正常运行。如果由于某种原因不再需要gem,则必须运行
gem uninstall gem_name
如上所述,因此,每次运行捆绑程序时,它都会重新检查依赖项
编辑-2014年12月24日
我看到人们不断提出这个问题,所以我决定添加一些内容。我给出的答案是在全球范围内维护宝石的情况。考虑使用诸如rbenv或rvm之类的gem管理器,以使gem组的范围限定于特定项目。
这意味着不会在全局级别上安装任何gem,因此,当您从项目的Gemfile中删除一个gem并重新运行bundle时,显然不会将其加载到项目中。然后,您可以运行bundle clean(使用项目目录),它将从系统中删除曾经从Gemfile(位于同一目录中)安装的所有那些gem,但此时不再在其中列出。长话短说-去除未使用的宝石。
这将卸载捆绑程序安装的gem:
bundle exec gem uninstall GEM_NAME
请注意,这会抛出
错误:执行gem时...(NoMethodError)#<Bundler :: SpecSet:0x00000101142268>的未定义方法`delete'
但实际上已删除了该宝石。下次您运行bundle install
gem时,将重新安装它。
ERROR: While executing gem ... (NoMethodError) undefined method `delete' for #<Bundler::SpecSet:0x00000101142268>
使用较新版本的捆绑程序,您可以使用clean任务:
$ 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,则不建议这样做(即,所有项目都将其gem放在同一位置)。但是,几乎没有什么方法可以使每个项目的宝石保持独立:
rvm
宝石集(http://rvm.io/gemsets/basics)bundle install
具有以下任一选项:--deployment
或--path=<path>
((http://bundler.io/v1.3/man/bundle-install.1.html)bundle clean --force
删除了一堆我在当前项目中不使用但在其他项目中使用的宝石。我应该设定一条路吗?只是bundle clean
返回“仅在设置--path或--force时才能使用捆绑包清理”。但是该--path
选项甚至没有出现在帮助中。
clean
如果您正在使用全局gemset,则该任务实际上没有任何意义。但是,如果您愿意,您的每个项目都可以有各自的特色。你可以这样做,或者通过RVM gemsets(rvm.io/gemsets/basics),或者通过指定的宝石路径--path
的选项bundle install
(bundler.io/v1.3/man/bundle-install.1.html)
您必须使用'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
Bundler现在有一个bundle remove GEM_NAME
命令(自v1.17.0,2018年10月25日起)。
gem uninstall pg
从项目文件夹运行将从全局/系统级别的gemset而不是捆绑程序中卸载pg