2014-01-24 46 views
1

我一直在玩大厨的宝石。当我检查它的依赖关系时,事实证明它取决于json,chef-zero等一些gems的多个版本。依赖于不同版本的一些宝石

我的问题是为什么一个gem取决于同一个gem的多个版本?我的意思是,不应该像我安装最新版本的厨师零,它满足厨师的所有依赖?此外,我有什么办法可以进行更改,以便厨师只依赖一个厨师零版本?

回答

3

那么这就是开源的美妙之处,任何具有出色想法和良好编程技能的人都可以贡献自己的力量。但是人们并没有从头开始编码所有的东西。它是一个渐进的过程,所以宝石使用其他可用的宝石来满足他们的需求,从而导致依赖。

一个简单的例子就是像'PDFKit'或'wicked_pdf'这样的宝石。这两个都是将html页面打印为pdf的绝佳宝石,但它们使用相同的深度,即'wkhtmltopdf-binary'。由于后者已经可用,对于这些插件的作者来说,写这部分代码实际上并不是一个好主意。这样更聪明。

所以,总之你要照顾好自己的依赖,但对加方几乎每一个好的宝石明确提到了他们的更改日志中的依赖状态。

+0

听起来不错。但是我想知道的是为什么宝石取决于同一个宝石的多个版本。我的意思是,如果我只需要安装一个gem,而不是安装不同的版本,会不会更好? – Pensu

+1

看看http://stackoverflow.com/questions/6132479/2-gems-need-different-versions-of-the-same-dependency,也许它会帮助! – shivam

0

嗯,这不完全是。您不必安装相同gem的多个版本。据我所知,你是通过以下类型的厨师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之间。