15

2 回目のbundle install実行以降、Gemfile が変更されない限り、Gemfile.lock から依存関係が読み込まれます。

しかし、これら 2 つのファイル間の変更の検出はどのように行われるのだろうか。

たとえば、新しい依存関係を Gemfile に追加せずに Gemfile.lock に直接追加する場合 (Gemfile.lock は Gemfile から自動生成されるため、ベスト プラクティスとは対照的に)、bundle installGemfile を変更済みと見なしますか?

実際、bundle installプロセスは、変更を検出するために、Gemfile ツリーと Gemfile.lock ツリー全体を比較しますか?

そうであれば、依存関係を Gemfile.lock に直接追加していても、Gemfile は変更されたものとして検出され (異なるため)、Gemfile.lock を再消去します (したがって、追加された依存関係が失われます...)

bundle install2回目の打ち上げからの経緯は?

より明確にするために、私の質問は次のとおりです。

変更は Gemfile のみに基づいていますか? bundle installつまり、バンドラーはすべての実行番号 Nの Gemfile スナップショットを保持し、それをbundle install実行 N+1 と比較するだけですか?

または、バンドラーのメモリにスナップショットが作成されず、バンドラーは毎回 Gemfile.lock と比較して、Gemfile が変更されたと見なす必要があるかどうかを検出します。

4

2 に答える 2

22

Gemfile.lock を編集すると、Rails アプリは別のバージョンの gem に依存することになります... この場合、gem-versioning システムの整合性が損なわれます。Gemfile.lock ファイルを直接編集するのは非常に悪い考えです。

いい人になって、Gemfileのみと取引してください

于 2012-06-21T10:16:07.633 に答える