bundle-cache
- 將必要的 .gem
檔案打包到應用程式中
bundle cache
別名:package
、pack
將執行應用程式所需的所有 .gem
檔案複製到 vendor/cache
目錄中。未來執行 bundle install(1)
時,優先使用快取中的寶石,而不是 rubygems.org
上的寶石。
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
的功能,現在 package
和 pack
是 cache
的別名。