护栏束清洁


88

更新捆绑软件后,您将拥有一些可能已过时的gem-因为已安装了该gem的较新版本。bundle可执行文件下没有这样的命令bundle clean。人们如何摆脱这些过时的宝石?

这是尝试减少我的rails应用程序中的块大小。

Answers:


131

如果您使用的是Bundler 1.1或更高版本,则可以bundle clean按照您的想象使用。如果您正在使用,则这是多余的bundle install --path(Bundler管理使用--path指定的位置,因此负责删除过时的gem),但是如果您已使用Bundler作为系统gem安装gem,bundle clean --force则将删除不属于任何系统的gem您的Gemfile要求。显而易见的警告:如果您有其他依赖Gemfile中没有的系统gem的应用程序,则不要这样做!

Pat Shaughnessy很好地描述了bundle clean捆绑程序1.1和其他新功能


30
对于使用rvm的用户,请注意,它们bundle clean --force不会影响您的全局gem,而只会影响您当前的gemset中的那些。所以bundle clean --force会产生相同的结果,并更快然后rvm gemset empty后面bundle install
加布·科普利

19
免责声明:如果不小心,“捆绑清洁--force”可以吹走大量宝石。那应该是这一回应的第一行……尤其是因为它有很多票。小心!
jerrylroberts

36

如果您使用的是RVM,则可以将其rvm gemset empty用于当前gemset-此命令将删除安装到当前gemset的所有gem(gemset本身将保留在原位)。然后运行bundle install以安装gem的实际版本。另外,请确保在此过程中不要删除诸如rake,bunder等常规的gem rvm gemset empty(如果是这种情况,请通过gem install之前手动安装它们bundle install)。


22

如果您使用的是RVM,则可以将gems安装到gemsets中。这样,当您要执行完全清理时,您可以简单地删除gemset,从而删除其中安装的所有gem。您的另一个选择是简单地卸载未使用的gem,然后重新运行bundle install命令。

由于捆绑程序旨在成为每个项目的gem版本控制工具,因此它不提供bundle clean命令。这样做将意味着也有可能删除与其他项目关联的宝石,这是不希望的。这意味着捆绑程序可能是用于管理gem目录的错误工具。我个人的建议是在某些项目或红宝石版本中使用RVM宝石集对您的宝石进行沙箱处理。


41
无需删除gemset,只需键入“ rvm gemset empty gemset_name”,然后再次运行“ bundle install”。
2013年

很好的解释。知道有关捆绑器的帮助。谢谢。
Volte

9
捆绑清洁--force将完成这项工作
水手2014年

对于rvm,如果“捆绑安装”拒绝重新下载gem,请擦拭.rvm / gems / ruby​​-xxxxxx / specifications文件夹。
barbacan 2014年

@JAG我要补充一点的是,您需要在清洁gemset之后调用“ gem install bundler”才能调用bundle install
maleta 2015年

13

老实说,我在捆扎机循环依赖方面遇到了问题,最好的解决方法是rm -rf .bundle。不用烦恼,只需使用锤子即可。


1
我必须执行此操作才能阻止我烦恼“您必须使用--no-deployment调用捆绑安装”。谢谢
凯文

2
谢谢你的主意。虽然对我来说,使用更大的锤子有所帮助。rvm implode --force然后重新安装rvm
Ryan

1

我假设您将宝石安装到vendor/bundle?如果是这样,为什么不删除所有宝石并进行清理bundle install呢?


我的供应商目录仅跟踪资产和已安装的插件。我正在使用Rails 3.1
iGbanam,2011年

那么,如果未在部署中复制未使用的gem,那么删除它们的原因是什么?他们不占用那么多空间。
Leonid Shevtsov

我正在内部网上部署此Rails应用程序;表示我在本地处理文件和环境。如果您知道我可以使用的任何解决方案,请分享。
iGbanam


0

只需从Gemfile中删除过时的宝石即可。如果您在谈论Heroku(您没有提及),那么将在每个新发行版中编译该段代码,仅使用该文件的当前内容即可。


这不一定是heroku的。我想减小Rails应用程序本身的大小。
iGbanam

0

只需执行,即可清理废弃的宝石,并在捆绑后去除打印警告。

bundle clean --force

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.