2014-01-24 63 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之間。