为什么我们需要Ruby中的Gemfile.lock?

为什么我们需要Ruby中的Gemfile.lock?,ruby,rubygems,bundler,Ruby,Rubygems,Bundler,Gemfile.lock不是一种用来在依赖项版本控制中延续错误做法的黑客吗 也就是说,开发人员不应该在Gemfile中严格设置依赖版本范围吗 例如,如果我的Gemfile说我依赖gema版本1.0.1或版本[1.0-2.0],为什么我需要.lock?不,Gemfile.lock很有意义,并且对于自动选择gem版本的概念至关重要。作为一名开发人员,您不需要担心确切的版本号。您可以这样说“给我任何版本的gemx适合所有其他gem的所有其他版本”(只需说gem'xyz',没有任何进一步的信息)。或者你

Gemfile.lock不是一种用来在依赖项版本控制中延续错误做法的黑客吗

也就是说,开发人员不应该在Gemfile中严格设置依赖版本范围吗


例如,如果我的Gemfile说我依赖gema版本1.0.1或版本[1.0-2.0],为什么我需要.lock?

不,
Gemfile.lock
很有意义,并且对于自动选择gem版本的概念至关重要。作为一名开发人员,您不需要担心确切的版本号。您可以这样说“给我任何版本的gemx适合所有其他gem的所有其他版本”(只需说
gem'xyz'
,没有任何进一步的信息)。或者你可以告诉它保持在gem的旧版本(
gem'xyz',“~>2.3.0”
)或其他版本的错误修复范围内

通过在
Gemfile.lock
中添加准确的版本,您可以确保所有开发人员(和环境)的版本保持一致。您可以有意识地(并且有充分的文档记录)选择升级到较新版本的gem,而不是构建/部署过程中的随机部分

为什么我需要锁

安装与团队中其他人完全相同的版本,或者在生产中安装与开发中使用的相同版本


在您收集发布的签准时,可能会发布某个gem的新版本。您最好确保安装/加载的与您开发/测试的版本完全一致。

如果这很关键,为什么npm、bower、maven、OSGi等系统不使用它?这对deplo来说没有意义吗根据Gemfile的版本范围,y系统使用所有Gem中最兼容的依赖版本?@PedroD For npm,有一个版本的功能非常类似。其他人可能没有实现它,因为人们使用不同的生态系统,或者因为它太难实现(尤其是递归依赖和循环依赖)PedroD,我不知道其他的系统有什么关系。我想我给出了两个非常明确的原因,如果它不重要,或者我的解释不好,我很乐意解释更多。如果你想要另一个积极的例子,请考虑Perl世界中的<代码>纸箱< /代码>,它到底是什么样的?ruby中的code>bundler。最后一句话“您最好确保安装/加载的版本与您开发/测试的版本完全一致”,引起了我的共鸣,因此赢得了我的支持票。