142

私は Ruby on Rails の初心者で、Rails 3.0.9 を使用しています。

RailsのGemfileとの違いは何ですか?Gemfile.lock

4

3 に答える 3

180

使用Gemfileする gem を指定する場所で、バージョンを指定できます。

このGemfile.lockファイルは、Bundler がインストールされた正確なバージョンを記録する場所です。このように、同じライブラリ/プロジェクトが別のマシンにロードされている場合、実行は最新バージョンを使用してインストールするだけでなく、まったく同じバージョンbundle installを見てインストールします。(異なるマシンで異なるバージョンを実行すると、テストが壊れるなどの可能性があります。) ロック ファイルを直接編集する必要はありません。Gemfile.lockGemfile

Bundler's Purpose and Rationale、特に Checking Your Code into Version Control セクションを確認してください。

于 2011-08-03T13:52:13.200 に答える
169

通常、依存関係を 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

Gemfile.lock はどのように作成されますか?

それは最初のもので自動的に作成されます:

bundle install

指図。その後、 を実行するたびbundle installに、bundle は最初Gemfile.lockにそこで指定された gem を検索してインストールします。一貫性と安定性を提供するために、このファイルをプロジェクト間で配布するのが習慣です。

Gemfile.lock を更新するには?

アプリの最新バージョンに満足している場合は、更新できますGemfile.lock。に変更を反映するだけGemfileです。つまり、依存関係を の新しい正確なバージョンに変更しGemfileます。その後、次のように実行します。

bundle install

これGemfile.lockにより、最新バージョンのアプリで更新されます。

于 2012-06-09T09:13:49.570 に答える
6

Gemfile.lock

bundle install を実行すると、Bundler は使用したすべての gem の完全な名前とバージョン (Gemfile(5) で指定された gem の依存関係を含む) を Gemfile.lock というファイルに保持します。

Bundler は、以降の bundle install のすべての呼び出しでこのファイルを使用します。これにより、アプリケーションがマシン間で移動する場合でも、常に同じ正確なコードを使用することが保証されます。

依存関係の解決方法が原因で、一見小さな変更 (たとえば、Gemfile(5) 内の gem の依存関係のポイント リリースへの更新) でさえ、すべての依存関係を満たすために根本的に異なる gem が必要になる可能性があります。

その結果、Gemfile.lock をバージョン管理にチェックインする必要があります。そうしないと、リポジトリ (本番サーバーを含む) をチェックアウトするすべてのマシンがすべての依存関係を再度解決するため、Gemfile(5) 内のいずれかの gem またはそれらの依存関係が更新されました。

于 2013-11-07T12:06:35.133 に答える