とりあえず現時点での理解をまとめてみた。
まとめ
- Gemfile.lockはバージョン管理しよう
- デプロイするときは--deploymentオプションを使おう
GemfileとGemfile.lock
Gemfile
何をインストールするべきか記述する。
開発時に参照されるファイル
Gemfile.lock
何がインストールされたか、どのような依存関係があったかが記述される。
デプロイ時に参照されるファイル。
コマンド: bundle install
開発環境
$ bundle install #--path vendor/bundle
必要なら--pathを指定して、特定のディレクトリにgemをインストールさせる。
bundle install時に生成されたGemfile.lockは、デプロイ時に利用するので必ずバージョン管理する。
デプロイ時
参考: http://gembundler.com/man/bundle-install.1.html#DEPLOYMENT-MODE
$ bundle install --deployment
bundle install --deploymentすると、vendor/bundle以下にgemがインストールされる。
また、.bundle/configにBUNDLE_FROZEN="1"が追加される。
--deploymentオプションをつけた場合は、Gemfile.lockを元にgemがインストールされる。
--deployment付きで実行された環境で、Gemfileを書き換えて新たにgemをインストールすることはできない。
コマンド: bundle update
bundle updateはGemfile.lockの記述を無視して、GemfileでのGemの指定やそのバージョン指定などに基づいて、gemを更新する。
更新時にGemfile.lockを更新する。
--deploymentを利用している場合、開発時にしか使わない。