铁轨束干净

时间:2011-10-26 15:36:26

标签: ruby-on-rails ruby bundler

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

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

8 个答案:

答案 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