更新捆绑包后,您将拥有一些可能已过时的宝石 - 因为已安装该宝石的较新版本。 bundle
可执行文件下没有此类命令,即bundle clean
。如何摆脱这些过时的宝石?
这是尝试减少我的rails应用程序中的slu size大小。
答案 0 :(得分:125)
如果您使用的是Bundler 1.1或更高版本,则可以使用bundle clean
,就像您想象的那样。如果您使用bundle install --path
(Bundler管理您使用--path指定的位置,因此负责删除过时的宝石),这是多余的,但如果您使用Bundler将gem作为系统宝石安装,那么{ {1}}将删除Gemfile不需要的任何系统gem。盲目明显的警告:如果您有其他依赖于Gemfile中不存在的系统宝石的应用程序,请不要这样做!
Pat Shaughnessy对bundle clean
and other new additions in bundler 1.1有很好的描述。
答案 1 :(得分:36)
如果您正在使用RVM,则可以使用rvm gemset empty
作为当前gemset - 此命令将删除安装到当前gemset的所有gem(gemset本身将保留在原位)。然后运行bundle install
以安装宝石的实际版本。另外,请确保在rvm gemset empty
期间不删除rake,bundler等常规宝石(如果是这种情况,请在gem install
之前通过bundle install
手动安装。) / p>
答案 2 :(得分:21)
如果您使用的是RVM,则可以将宝石安装到gemsets。这样,当您想要执行完全清理时,您可以简单地删除gemset,从而删除其中安装的所有gem。您的另一个选择是简单地卸载未使用的gem并重新运行bundle install
命令。
由于bundler是一个每项目项目的gem版本控制工具,因此它不提供bundle clean
命令。这样做意味着可以删除与其他项目相关的宝石,这是不可取的。这意味着bundler可能是用于管理gem目录的错误工具。我个人的建议是使用RVM gemsets在某些项目或ruby版本中对您的gem进行沙盒化。
答案 3 :(得分:13)
老实说,我遇到了捆绑循环依赖的问题,最好的方法是rm -rf .bundle
。保存自己的头痛,只需使用锤子。
答案 4 :(得分:1)
我假设您将宝石安装到vendor/bundle
?如果是这样,为什么不删除所有的宝石并做一个干净的bundle install
?
答案 5 :(得分:1)
在搜索同一个问题的答案时,我遇到了gem_unused
您也可以阅读这篇文章:http://chill.manilla.com/2012/12/31/clean-up-your-dirty-gemsets/
源代码可在GitHub上获得:https://github.com/apolzon/gem_unused
答案 6 :(得分:0)
只需从Gemfile中删除过时的gem。如果你正在谈论Heroku(你没有提到那个)那么每个新版本都会编译slug,只使用该文件的当前内容。
答案 7 :(得分:0)
只需执行一次操作,即可清理掉废弃的宝石并在捆扎后去除打印警告。
bundle clean --force