Docs header transparent bg

捆绑缓存

bundle-cache - 将您需要的 .gem 文件打包到您的应用程序中

bundle cache

别名:packagepack

描述

将运行应用程序所需的所有 .gem 文件复制到 vendor/cache 目录中。将来,在运行 bundle install(1) 时,优先使用缓存中的 gem,而不是 rubygems.org 上的 gem。

Git 和路径 gem

bundle cache 命令还可以打包 :git:path 依赖项,除了 .gem 文件。这需要通过 --all 选项显式启用。使用后,--all 选项将被记住。

对多个平台的支持

当使用针对不同平台具有不同包的 gem 时,Bundler 支持在 vendor/cache 中缓存针对其他平台的 gem,其中 Gemfile 已解析(即存在于锁定文件中)。这需要通过 --all-platforms 选项启用。此设置将被记住在您的本地捆绑器配置中。

远程获取

默认情况下,如果您在运行 bundle cache(1) 后运行 bundle install(1),捆绑器仍将连接到 rubygems.org 以检查是否存在针对 vendor/cache 中任何 gem 的特定于平台的 gem。

例如,考虑这个 Gemfile(5)

source "http://rubygems.org.cn"

gem "nokogiri"

如果您在 C Ruby 下运行 bundle cache,捆绑器将检索 "ruby" 平台的 nokogiri 版本。如果您部署到 JRuby 并运行 bundle install,捆绑器将被迫检查是否存在 "java" 平台的 nokogiri

即使针对 Ruby 平台的 nokogiri gem 在技术上是可接受的,它有一个在 JRuby 上无法运行的 C 扩展。因此,默认情况下,捆绑器仍将连接到 rubygems.org 以检查它是否具有更特定于您的平台的 gem 版本。

这个问题也不限于 "java" 平台。类似的(常见)问题可能发生在 Windows 上开发并在 Linux 上部署时,甚至在 OSX 上开发并在 Linux 上部署时。

如果您确定 vendor/cache 中打包的 gem 适用于您所在的平台,您可以运行 bundle install --local 以跳过检查更合适的 gem,并使用 vendor/cache 中的 gem。

确保所有 gem 拥有正确平台版本的一种方法是在相同机器上运行 bundle cache 并检入 gem。例如,您可以在暂存过程中在相同的暂存机器上运行 bundle cache,并在部署到生产环境之前检入 vendor/cache

默认情况下,bundle cache(1) 会获取 gem 并将其安装到默认位置。要将依赖项打包到 vendor/cache 中而无需将其安装到本地安装位置,您可以运行 bundle cache --no-install

历史

在 Bundler 2.1 中,cache 吸收了 package 的功能,现在 packagepackcache 的别名。

在 GitHub 上编辑此文档,如果您发现错误或注意到有遗漏。