私は Ruby on Rails の初心者で、Rails 3.0.9 を使用しています。
RailsのGemfile
との違いは何ですか?Gemfile.lock
私は Ruby on Rails の初心者で、Rails 3.0.9 を使用しています。
RailsのGemfile
との違いは何ですか?Gemfile.lock
使用Gemfile
する gem を指定する場所で、バージョンを指定できます。
このGemfile.lock
ファイルは、Bundler がインストールされた正確なバージョンを記録する場所です。このように、同じライブラリ/プロジェクトが別のマシンにロードされている場合、実行は最新バージョンを使用してインストールするだけでなく、まったく同じバージョンbundle install
を見てインストールします。(異なるマシンで異なるバージョンを実行すると、テストが壊れるなどの可能性があります。) ロック ファイルを直接編集する必要はありません。Gemfile.lock
Gemfile
Bundler's Purpose and Rationale、特に Checking Your Code into Version Control セクションを確認してください。
通常、依存関係を Gemfile に次のように記述します。
gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..
ここでは基本的に、「バージョン 1.4.4 よりも大きい限り nokogiri が必要です」などと言います。ここで、Gemfile
8 か月前にセットアップを行い、この要件でアプリを正常にセットアップしたとします。8 か月前の nokogiri のバージョンは1.4.4でした。このバージョンでは、私の Rails アプリは問題なく完全に動作していました。
今、私は同じで構築しようとしていると思いますGemfile
。しかし、nokogiri のバージョンを見ると、現在の安定バージョンが1.4.9に変更されていることがわかります。つまり、ビルドしようとすると、バンドラーは nokogiri のバージョン1.4.9をインストールします ( がないと仮定しますGemfile.lock
)。
何も持っていない場合は、次のようGemfile.lock
に実行します。
bundle install
その場合、現在使用されている宝石はいつでも異なる可能性があります。あなたのアプリはバージョン1.4.4を使用しており、 8 か月前は問題なく動作していましたが、今ビルドしようとするとバージョン1.4.9になります。の最新バージョンでは壊れているか、 1.4.4nokogiri
で使用していたすばらしい機能が利用できなくなった可能性があります。
この種の問題を防ぐためにGemfile.lock
使用されます。正確なバージョンGemfile.lock
のみが記述されているため、これらのみがインストールされます。つまり、アプリを で配布すると、すべてのマシンに同じ gem がインストールされ、最も重要なことに、それらはすべて同じバージョンになります。これにより、安定した共通のデプロイ スタックが得られます。Gemfile.lock
それは最初のもので自動的に作成されます:
bundle install
指図。その後、 を実行するたびbundle install
に、bundle は最初Gemfile.lock
にそこで指定された gem を検索してインストールします。一貫性と安定性を提供するために、このファイルをプロジェクト間で配布するのが習慣です。
アプリの最新バージョンに満足している場合は、更新できますGemfile.lock
。に変更を反映するだけGemfile
です。つまり、依存関係を の新しい正確なバージョンに変更しGemfile
ます。その後、次のように実行します。
bundle install
これGemfile.lock
により、最新バージョンのアプリで更新されます。
Gemfile.lock
bundle install を実行すると、Bundler は使用したすべての gem の完全な名前とバージョン (Gemfile(5) で指定された gem の依存関係を含む) を Gemfile.lock というファイルに保持します。
Bundler は、以降の bundle install のすべての呼び出しでこのファイルを使用します。これにより、アプリケーションがマシン間で移動する場合でも、常に同じ正確なコードを使用することが保証されます。
依存関係の解決方法が原因で、一見小さな変更 (たとえば、Gemfile(5) 内の gem の依存関係のポイント リリースへの更新) でさえ、すべての依存関係を満たすために根本的に異なる gem が必要になる可能性があります。
その結果、Gemfile.lock をバージョン管理にチェックインする必要があります。そうしないと、リポジトリ (本番サーバーを含む) をチェックアウトするすべてのマシンがすべての依存関係を再度解決するため、Gemfile(5) 内のいずれかの gem またはそれらの依存関係が更新されました。