bundle-cache
- 必要な.gem
ファイルをアプリケーションにパッケージングします
bundle cache
エイリアス: package
, pack
アプリケーションの実行に必要なすべての.gem
ファイルをvendor/cache
ディレクトリにコピーします。今後、bundle install(1)
を実行する際に、rubygems.org
上のgemよりもキャッシュ内の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では、cache
はpackage
の機能を引き継ぎ、package
とpack
はcache
のエイリアスになりました。