bundle-cache
- 将您需要的 .gem
文件打包到您的应用程序中
bundle cache
别名:package
,pack
将运行应用程序所需的所有 .gem
文件复制到 vendor/cache
目录中。将来,在运行 bundle install(1)
时,优先使用缓存中的 gem,而不是 rubygems.org
上的 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
的功能,现在 package
和 pack
是 cache
的别名。