Docs header transparent bg

套件快取

bundle-cache - 將必要的 .gem 檔案打包到應用程式中

bundle cache

別名:packagepack

說明

將執行應用程式所需的所有 .gem 檔案複製到 vendor/cache 目錄中。未來執行 bundle install(1) 時,優先使用快取中的寶石,而不是 rubygems.org 上的寶石。

Git 和路徑寶石

bundle cache 指令除了可以打包 .gem 檔案外,還可以打包 :git:path 相依性。這需要透過 --all 選項明確啟用。一旦使用,--all 選項將會被記住。

支援多個平台

在使用針對不同平台有不同套件的寶石時,Bundler 支援快取 Gemfile 已解析(即存在於鎖定檔中)的其他平台的寶石,並將其儲存在 vendor/cache 中。這需要透過 --all-platforms 選項啟用。此設定將會記在您本地的 bundler 設定檔中。

遠端擷取

預設情況下,如果您在執行 bundle cache(1) 後執行 bundle install(1),bundler 仍會連線至 rubygems.org,以檢查 vendor/cache 中的任何寶石是否存在特定於平台的寶石。

例如,考慮這個 Gemfile(5)

source "https://rubygems.org"

gem "nokogiri"

如果您在 C Ruby 下執行 bundle cache,bundler 會擷取 "ruby" 平台的 nokogiri 版本。如果您部署到 JRuby 並執行 bundle install,bundler 會強制檢查是否存在 "java" 平台的 nokogiri

儘管 Ruby 平台的 nokogiri 寶石在 JRuby 上技術上是可以接受的,但它有一個 C 延伸元件無法在 JRuby 上執行。因此,bundler 預設仍會連線至 rubygems.org,以檢查它是否有一個更特定於您平台的寶石版本。

這個問題也不僅限於 "java" 平台。在 Windows 上開發並部署到 Linux,甚至在 OSX 上開發並部署到 Linux 時,可能會發生類似的(常見)問題。

如果您確定 vendor/cache 中打包的寶石適用於您所在的平台,您可以執行 bundle install --local 來略過檢查更適當的寶石,並使用 vendor/cache 中的寶石。

確保所有 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 上編輯此文件,如果你發現錯誤或發現有遺漏之處。