更新捆绑包后,您将有一些可能已过时的宝石 - 因为该宝石的新版本已安装。在bundle
可执行文件中没有这样的命令,即bundle clean
。人们如何摆脱这些过时的宝石?导轨捆绑清洁
这是一个尝试在我的Rails应用程序中减少弹塞大小。
更新捆绑包后,您将有一些可能已过时的宝石 - 因为该宝石的新版本已安装。在bundle
可执行文件中没有这样的命令,即bundle clean
。人们如何摆脱这些过时的宝石?导轨捆绑清洁
这是一个尝试在我的Rails应用程序中减少弹塞大小。
如果您使用Bundler 1.1或更高版本,则可以使用bundle clean
,就像您想象的那样。如果您使用的是bundle install --path
(Bundler管理您使用--path指定的位置,因此需要负责移除过期的宝石),但这是多余的,但是如果您使用Bundler将宝石安装为系统宝石,则bundle clean --force
将删除任何系统您的Gemfile不需要的宝石。极其明显的警告:如果您有其他依赖系统宝石的应用程序不在您的Gemfile中,请不要这样做!
Pat Shaughnessy对bundle clean
and other new additions in bundler 1.1有很好的描述。
如果您使用RVM,您可以将您的宝石安装到gemsets。这样,当您想要执行完整清理时,您可以简单地删除gemset,然后删除安装在其中的所有gem。您的其他选择是简单地卸载未使用的宝石,然后重新运行您的bundle install
命令。
由于bundler旨在成为每个项目的项目创业版本工具,因此它不提供bundle clean
命令。这样做意味着可以去除与其他项目相关的宝石,这是不可取的。这意味着bundler可能是用来管理你的gem目录的错误工具。我个人的建议是使用RVM gemset来在某些项目或ruby版本中对你的宝石进行沙箱。
只需从您的Gemfile中删除过时的宝石。如果你正在谈论Heroku(你没有提到这一点),那么就会使用该文件的当前内容编译每个新版本的slug。
这不一定适用于heroku。我想减少rails应用程序本身的大小。 – iGbanam
如果您使用的是RVM,则可以使用rvm gemset empty
作为当前gemset - 此命令将删除安装到当前gemset的所有gem(gemset本身将保留原位)。然后运行bundle install
以安装宝石的实际版本。另外请确保您在rvm gemset empty
期间不删除诸如rake,bundler等的一般宝石(如果是这种情况,请在bundle install
之前通过gem install
手动安装它们)。
当搜索同一个问题的答案时,我碰到了gem_unused。
你也可能想看看这篇文章:http://chill.manilla.com/2012/12/31/clean-up-your-dirty-gemsets/
的源代码可以在GitHub:https://github.com/apolzon/gem_unused
对于那些使用rvm的人,请注意'bundle clean --force'不会触及您的全局gem,但只会触及当前gemset中的那些gemset。所以'bundle clean --force'产生的结果与'rvm gemset empty'相同,结果比'bundle install'更快。 –
免责声明:如果你不小心,“捆绑清洁 - 力量”可以吹走大量的宝石。这应该是这种回应的第一行......特别是因为它有这么多票。小心! – jerrylroberts