导轨捆绑清洁

Posted

技术标签:

【中文标题】导轨捆绑清洁【英文标题】:rails bundle clean 【发布时间】:2011-12-15 20:21:29 【问题描述】:

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

这是在我的 Rails 应用程序中减少 slug 大小的尝试。

【问题讨论】:

【参考方案1】:

只需执行,清理过时的 gems 并在捆绑后删除打印警告。

bundle clean --force

【讨论】:

【参考方案2】:

如果您使用的是 RVM,您可以将 gem 安装到 gemsets。这样,当您想要执行完全清理时,您可以简单地删除 gemset,这反过来又会删除安装在其中的所有 gem。您的另一个选择是简单地卸载您未使用的 gem 并重新运行您的 bundle install 命令。

由于 bundler 旨在成为一个 project-per-project gem 版本控制工具,它不提供 bundle clean 命令。这样做意味着也有可能删除与其他项目相关的 gem,这是不可取的。这意味着 bundler 可能是用于管理 gem 目录的错误工具。我个人的建议是在某些项目或 ruby​​ 版本中使用 RVM gemsets 来沙箱化你的 gem。

【讨论】:

无需删除 gemset,您只需输入 'rvm gemset empty gemset_name' 然后再次运行 'bundle install'。 很好的解释。了解捆绑程序会有所帮助。谢谢。 bundle clean --force 会完成这项工作 使用 rvm,如果“捆绑安装”拒绝重新下载 gem,请擦除文件夹 .rvm/gems/ruby-xxxxxx/specifications。 @JAG 我要补充一点,您需要在清理 gemset 后 'gem install bundler' 才能调用 bundle install【参考方案3】:

在寻找相同问题的答案时,我遇到了gem_unused。 您可能还想阅读这篇文章:http://chill.manilla.com/2012/12/31/clean-up-your-dirty-gemsets/ 源代码在 GitHub 上:https://github.com/apolzon/gem_unused

【讨论】:

【参考方案4】:

如果您使用 RVM,您可以对当前 gemset 使用 rvm gemset empty - 此命令将删除安装到当前 gemset 的所有 gem(gemset 本身将保留在原位)。然后运行bundle install 以安装实际版本的gem。还要确保在 rvm gemset empty 期间不要删除诸如 rake、bundler 等一般 gem(如果是这种情况,请在 bundle install 之前通过 gem install 手动安装它们)。

【讨论】:

【参考方案5】:

老实说,我遇到了捆绑程序循环依赖的问题,最好的方法是 rm -rf .bundle。省得自己头疼,用锤子就行了。

【讨论】:

我必须这样做才能让它不再困扰我“您必须使用 --no-deployment 调用捆绑安装”。谢谢 感谢您的想法。虽然对我来说,使用更大的锤子有帮助。 rvm implode --force 然后重新安装rvm【参考方案6】:

如果您使用的是 Bundler 1.1 或更高版本,您可以使用 bundle clean,就像您想象的那样。如果您使用bundle install --path,这是多余的(Bundler 管理您使用--path 指定的位置,因此负责删除过时的gem),但如果您使用Bundler 将gem 作为系统gem 安装,那么bundle clean --force将删除您的 Gemfile 不需要的任何系统 gem。非常明显的警告:如果您有其他应用程序依赖于您的 Gemfile 中没有的系统 gem,请不要这样做!

Pat Shaughnessy 对bundle clean and other new additions in bundler 1.1 有很好的描述。

【讨论】:

对于那些使用 rvm 的人,请注意 bundle clean --force 不会触及您的全局 gem,而只会触及您当前 gemset 中的那些。所以bundle clean --force 产生与rvm gemset empty 相同的结果并且比bundle install 更快。 免责声明:如果您不小心,“Bundle clean --force”可能会吹走大量宝石。这应该是这个回应的第一行......特别是因为它有这么多选票。小心点!【参考方案7】:

只需从您的 Gemfile 中删除过时的 gem。如果你说的是 Heroku(你没有提到),那么每个新版本都会编译 slug,只使用该文件的当前内容。

【讨论】:

这不一定适用于heroku。我想减小 rails 应用程序本身的大小。【参考方案8】:

我假设您将 gem 安装到 vendor/bundle 中?如果是这样,为什么不直接删除所有的宝石并做一个干净的bundle install

【讨论】:

我的供应商目录只跟踪资产和安装的插件。我在 Rails 3.1 上 那么,如果未在部署时复制未使用的 gem,那么删除未使用的 gem 的原因是什么?它们不会占用太多空间。 我正在内部网上部署这个 Rails 应用程序;这意味着我在本地处理文件和环境。如果您知道我可以为此使用的任何解决方案,请分享。

以上是关于导轨捆绑清洁的主要内容,如果未能解决你的问题,请参考以下文章

该捆绑包当前的导轨锁定在 4.0.4

由于从3到5的迁移导轨,升级配置较少

OSGi 捆绑包从非捆绑包 jar 导入包:为它们创建捆绑包?

Android 构建捆绑包错误或不生成捆绑包

捆绑在其他软件中安装 是啥意思

捆绑问题(angular2 + webpack 捆绑)