Docs header transparent bg

bundle cache

bundle-cache - 必要な.gemファイルをアプリケーションにパッケージングします

bundle cache

エイリアス: package, pack

説明

アプリケーションの実行に必要なすべての.gemファイルをvendor/cacheディレクトリにコピーします。今後、bundle install(1)を実行する際に、rubygems.org上のgemよりもキャッシュ内のgemが優先的に使用されます。

GitおよびパスGem

bundle cacheコマンドは、.gemファイル以外にも:gitおよび:path依存関係をパッケージ化できます。これには、--allオプションで明示的に有効にする必要があります。一度使用すると、--allオプションは記憶されます。

複数プラットフォームのサポート

異なるプラットフォームに対して異なるパッケージを持つgemを使用する場合、Bundlerは、Gemfileが解決済みの(つまり、lockfileに存在する)他のプラットフォームのgemをvendor/cacheにキャッシュすることをサポートします。これは--all-platformsオプションで有効にする必要があります。この設定は、ローカルのbundler設定に記憶されます。

リモートフェッチ

bundle cache(1)を実行した後にbundle install(1)を実行すると、デフォルトでは、bundlerは依然としてrubygems.orgに接続して、vendor/cache内のgemのいずれかにプラットフォーム固有のgemが存在するかどうかを確認します。

例えば、このGemfile(5)を考えてみましょう。

source "https://rubygems.org"

gem "nokogiri"

C Rubyでbundle cacheを実行した場合、bundlerは"ruby"プラットフォームのnokogiriのバージョンを取得します。JRubyにデプロイしてbundle installを実行すると、bundlerは"java"プラットフォームのnokogiriが存在するかどうかを確認する必要があります。

Rubyプラットフォーム用のnokogiri gemは技術的にはJRubyでも使用できますが、JRubyでは実行されないC拡張機能が含まれています。その結果、bundlerはデフォルトで、プラットフォームにより適切なgemのバージョンがあるかどうかをrubygems.orgに確認します。

この問題は"java"プラットフォームのみに限定されません。Windowsで開発してLinuxにデプロイする場合、またはOSXで開発してLinuxにデプロイする場合などにも、同様の問題(よくある問題)が発生する可能性があります。

vendor/cacheにパッケージ化されたgemが現在使用しているプラットフォームに適切であることが確実な場合は、bundle install --localを実行して、より適切なgemの確認をスキップし、vendor/cache内のgemを使用できます。

すべてのgemの適切なプラットフォームバージョンの取得を確実に実行する1つの方法は、同一のマシンでbundle cacheを実行し、gemをチェックインすることです。例えば、ステージングプロセス中に同一のステージングボックスでbundle cacheを実行し、本番環境にデプロイする前にvendor/cacheをチェックインできます。

デフォルトでは、bundle cache(1)はgemをデフォルトの場所にフェッチしてインストールします。依存関係をローカルインストール場所にインストールせずにvendor/cacheにパッケージ化するには、bundle cache --no-installを実行します。

履歴

Bundler 2.1では、cachepackageの機能を引き継ぎ、packagepackcacheのエイリアスになりました。

GitHubでこのドキュメントを編集する (エラーを見つけた場合、または何か不足していることに気づいた場合)