2011-09-19 71 views

回答

9

您可以設置允許的寶石

gem 'rack', '<1.3.3', '>1.2.4' 

的INTERVALL這將加載所選INTERVALL裏面最實際的一個。

但我不認爲你可以要求不同的寶石版本。 如果一個gem會以不同的版本加載,每個類和模塊必須得到它自己的命名空間以避免覆蓋gem的方法。

+0

有很多的情況下,新版本的Gems做一個完整的重構,並改變他們的命名空間/模塊名稱。 Mongo 1.x系列從'MongoClient'名稱空間變爲'Mongo :: Client',並且將成爲支持相同gem的多個版本的理想用例。 –

+0

@knut你是什麼意思最實際的? – Kamesh

+0

@Kamesh最高版本號的寶石。 – knut

12

不,您無法同時加載多個寶石版本。這是因爲,正如knut強調的那樣,代碼會衝突。寶石如何知道使用Rack的1.2.4版本而不是1.3.3版本的Rack?它不能。

另外:在Bundler中,爲了完成捆綁過程,所有的gem依賴關係必須滿足。如果你有一個寶石明確要求機架1.2.4(即= 1.2.4是在該寶石的gemspec),然後另一個需要一個版本的機架,如>= 1.3寶石,那麼這些寶石版本將衝突,Bundler會告訴你如此。

+0

很好的答案!最後一句是否被截斷了? (「那麼這些寶石版本......」)任何機會添加其餘的?我很想閱讀到最後:-) – tjmw

+0

@tjmw:這並不令人興奮......它只是「會衝突,Bundler會告訴你的。」 –

2

我遇到了這個問題,因爲我想將某些破損的上游寶石版本列入黑名單。雖然你不能做

gem 'rack', '1.3.3', '1.2.4'

可以有多個!=約束排除版本,你知道是有問題的:

gem 'rack', '!= 1.3.0.beta2', '!= 1.3.0.beta'

相關問題