我一直在玩杰姆大厨。当我检查它的依赖关系时,发现它依赖于一些gem的多个版本,比如json、chef-zero等。
我的问题是,为什么一个gem依赖于同一gem的多个版本?我的意思是,难道不应该像我安装了最新版本的chef-zero,它满足了chef的所有依赖关系吗?此外,有没有办法使我可以进行更改,使chef只依赖于一个版本的chef-zero?
发布于 2014-01-24 14:37:11
这就是开源的美妙之处,任何有伟大想法和优秀编程技能的人都可以贡献自己的力量。但是,人们并不是从零开始编写所有代码的。这是一个进化的过程,因此gem使用其他可用的gem来满足他们的需求,从而导致依赖。
一个简单的例子是像'PDFKit‘或'wicked_pdf’这样的gem。这两个都是将html页面打印成pdf的优秀工具。但它们使用相同的深度,即'wkhtmltopdf-binary‘。由于后者已经可用,因此对于这些插件的作者来说,编写这部分代码实际上并不是一个好主意。这样更聪明。
所以简而言之,你必须自己处理依赖关系,但从好的方面来说,几乎每个好的gem都会在他们的更改日志中明确地提到它们的依赖状态。
发布于 2014-01-27 19:23:14
不完全是这样的。您不必安装同一gem的多个版本。据我所知,您对以下类型的Chef 11.8.2的依赖项感到困惑:
chef-zero >= 1.6.2, ~> 1.6
diff-lcs >= 1.2.4, ~> 1.2在这种情况下,您必须安装支持这两个约束的版本。例如,对于chef-zero,它将是超过1.6.2 (第一个约束)的任何版本,但不大于2.0 (第二个约束)。(Gem dependencies versions meaning)
使用json甚至更简单
json <= 1.7.7, >= 1.4.4安装的版本应在1.4.4到1.7.7之间。
https://stackoverflow.com/questions/21325853
复制相似问题