web-dev-qa-db-ja.com

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

私はRuby on Railsであり、私はRails 3.0.9。

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

115
Shamith c

Gemfileは、使用するgemを指定する場所であり、どのバージョンを指定することができます。

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

Bundler's Purpose and Rationale 、特にバージョン管理へのコードのチェックセクションを確認してください。

147
Dylan Markow

Gemfile.lock

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

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

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

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

3
Ajey