【发布时间】:2017-10-19 23:14:26
【问题描述】:
自从bundle install 第二次执行以来,只要 Gemfile 没有改变,依赖项就会从 Gemfile.lock 加载。
但我想知道如何检测这两个文件之间的更改。
例如,如果我将新依赖项直接添加到 Gemfile.lock 中而不将其添加到 Gemfile 中(与最佳实践相反,因为 Gemfile.lock 是从 Gemfile 自动生成的),bundle install 是否会考虑 Gemfile改变了吗?
确实,bundle install 进程是否会比较整个 Gemfile 和 Gemfile.lock 树以检测更改?
如果是这样,即使我直接向 Gemfile.lock 添加依赖项,Gemfile 也会被检测为已更改(因为不同)并会重新擦除 Gemfile.lock(因此丢失添加的依赖项...)
bundle install第二次上线以来的流程是什么?
为了更清楚,我的问题是:
是否仅基于 Gemfile 的更改?这意味着 bundler 会保留每个 bundle install 执行次数 N 的 Gemfile 快照,并且仅将其与 bundle install 执行次数 N+1 进行比较?
或者在 bundler 内存中没有创建快照,并且 bundler 每次都会与 Gemfile.lock 进行比较,以检测是否必须将 Gemfile 视为已更改。
【问题讨论】:
-
只需删除 Gemlock 文件,将所需的 gem 放入 gem 文件并运行
bundle install。而已。我认为多考虑 gemlock 文件不是一个好主意。 ;) -
@uDaY 我同意你的看法,但我对 bundle install 的底层过程很好奇 :)