运行bundle install命令后,` Gemfile. exe `在工作目录中创建Lock '。该文件中的指令是什么意思?
例如,让我们以以下文件为例:
PATH
remote: .
specs:
gem_one (0.0.1)
GEM
remote: http://example.org/
specs:
gem_two (0.0.2)
gem_three (0.0.3)
gem_four (0.0.4)
PLATFORMS
platform
DEPENDENCIES
gem_two
gem_one!
“路径”,“GEM”,“平台”和“依赖关系”描述了什么?所有这些都是必需的吗?
什么应该包含“remote”和“specs”子指令?
“DEPENDENCIES”组中宝石名称后面的感叹号是什么意思?
Bundler是一个Gem管理器,通过跟踪和安装所需的Gem和版本,为Ruby项目提供了一致的环境。
Gemfile和Gemfile。锁是邦德勒宝石给予的初级产品(邦德勒本身就是宝石)。
Gemfile包含您对gem(s)的项目依赖,您手动指定了版本,但这些gem(s)的输入依赖于其他gem(s),这些gem(s)由绑定器自动解析。
Gemfile。lock包含Gemfile中所有gem(s)的完整快照以及相关的依赖项。
当您第一次调用bundle install时,它将创建这个Gemfile。Lock并在所有后续调用中使用此文件来捆绑安装,这确保您已经安装了所有依赖项,并将跳过依赖项安装。
在不同的机器上共享代码时也会发生同样的情况
共享您的Gemfile。当你在其他机器上运行bundle install时,它会引用你的Gemfile。锁定并跳过依赖项解析步骤,相反,它将安装您在原始机器上使用的所有相同的依赖gem,这将在多台机器上保持一致性
为什么我们需要在多台机器上保持一致性?
在不同的机器上运行不同的版本可能会导致故障
代码
假设你的应用使用的是1.5.3版本,并且在14个月前就可以工作了
没有任何问题,并且您尝试在不同的机器上安装
没有Gemfile。锁定后,您将获得1.5.8版本。也许它坏了
与最新版本的一些gem(s)和您的应用程序
失败。保持一致性是最重要的(最好)
实践)。
也可以在Gemfile中更新gem(s)。使用锁定
包更新。
这是基于保守更新的概念
似乎没有明确的文件谈论Gemfile。锁格式。也许是因为Gemfile。Lock只被bundle内部使用。
然而,自从Gemfile。lock是Gemfile的快照,这意味着它的所有信息都应该来自Gemfile(如果Gemfile中没有指定,则来自默认值)。
对于GEM,它列出了在Gemfile中直接或间接引入的所有依赖项。GEM下的remote告诉在哪里获取宝石,这是由Gemfile中的source指定的。
如果一个宝石没有从remote获取,PATH会告诉它所在的位置。当你声明一个依赖时,PATH的信息来自于Gemfile中的PATH。
PLATFORM来自这里。
对于DEPENDENCIES,它是由bundle解析的依赖项的快照。