2012-06-21 116 views
10

bundle installの2度目の実行以来、Gemfileが変更されない限り、依存関係はGemfile.lockからロードされます。Gemfile.lockを直接変更するとどうなりますか?

しかし、これら2つのファイルの間でどのように変更が検出されたのだろうか。

たとえば、Gemfile.lockに直接Gemfile.lockに新しい依存関係を追加する場合(Gemfile.lockがGemfileから自動生成されているのでベストプラクティスとは対照的に)、bundle installはGemfileをかわった ?

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

Gemfile.lockに直接依存関係を追加しても、Gemfileは変更されたとして検出され、Gemfile.lockを再消去します(追加された依存関係を失う...)

2回目の打ち上げ以来、bundle installの処理は何ですか?

より明確にするために、私の質問は:

はGemfileからベースの変化はありますか?これは、bundlerがすべてのbundle install実行番号NのGemfileスナップショットを保持し、単にそれをbundle install実行N + 1と比較することを意味しますか?

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

+0

Gemlockファイルを削除し、gemファイルに必要なgemを入れて、 'bundle install'を実行してください。それでおしまい。私はgemlockファイルについて多くのことを考えるのは良い考えだとは思わない。 ;) – uday

+0

@uDaY私はあなたに同意しますが、私はバンドルインストールのフードの下でプロセスに興味があります:) – Mik378

+3

[this](http://gembundler.com/rationale.html)と[this] http://gembundler.com/man/bundle-install.1.html)? –

答えて

15

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

は、いい男てくださいとだけ

1

私はこの質問は非常に古いですけどGemfileで取引を行うことが、私は最近、このように私は自分の答えを与えているに対処しなければなりませんでした。 Omniauthは最近、セキュリティ上の問題を修正するためにバージョン1.3.2にアップデートされました。 Omniauthをこの新しいパッチ版にアップデートすることを任されましたが、私たちのGemfileをチェックすると、そこにGemがないことが分かりました。ですから、Gemfile.lockのバージョンを1.3.1から1.3.2に切り替えることができます。長い話が短い、それは働いていたが、私はそうする必要はなかったことが判明した。あなたが変更を加える必要があると思えば、言っ

- omniauth (1.3.1) 
+ omniauth (1.3.2) 

:私は何をやってしまったことは、次のコマンドに私は手動でやろうとしていたのと同じ変更が生じた

bundle update omniauth --patch

を発行しました。 Gemfile.lockには、おそらくGemfile.lock自体に触れることなくその変更を行う方法があります。ちょうどbundle --helpをすれば、あなたが達成しようとしていることを実行している可能性があります。

関連する問題