2011-09-07 33 views
10

我想知道是否應該爲Gemfile中添加的每個gem指定gem版本。早些時候,我的項目很少,我沒有爲所有的寶石指定任何版本,捆綁銷售者照顧它,這也工作得很好。是否在Gemfile中強制指定Gem版本或者是否爲rails應用程序

但最近我開始研究過去6個月正在開發的幾個項目。在該項目中,許多gem版本僅在Gemfile中指定,而Gemfile.lock被忽略。這導致了很多頭痛,最終解決版本衝突和升級幾個寶石。

也得到了知道這是不好的做法,從應用程序版本控制中移除Gemfile.lock的 - 好的文章由胡達 - http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

所以,我的問題是我應該爲每一個寶石指定版本,我的Gemfile specifiy或者只是指定名稱和捆綁器會照顧版本?處理這個問題的最佳做法是什麼?

更新 -

更新這個問題,正確指定的問題,作爲一個Gemfile中sovles很多問題:)

習題1 - 每個開發人員都應該有寶石的版本相同。 實際上將Gemfile.lock添加到版本控制中解決了這個問題。開發人員必須小心,他們運行「捆綁安裝」/「捆綁」而不是「捆綁更新」,因爲它也會更新版本。

問題2 - 一些寶石版本,如果改變,剎車應用程序代碼。 其實隨着omniauth,這種類型的問題,因爲API從一個版本改變到另一個版本。是的,爲了保持應用程序的正常運行,需要爲這些寶石指定版本。

My Prob。 - 因此,在我的gemfile中,由於A和B的版本都是嚴格指定的,並且由於它們都依賴於Z的不同版本,而這些版本存在依賴關係,所以我甚至無法運行捆綁包安裝或捆綁更新。唯一的解決方案是刪除版本並讓bundler接聽電話。這就是爲什麼我有問題 - Gemfile.version_specification_mandatory? #=> true/false

+0

好問題。這也回答了我的好奇心,因爲我已經指定了寶石版本! – fregas

回答

2

如果您使用gem作爲僅在特定版本中可用的內容,則需要指定版本。

Bundler安裝最新版本,或者如果未指定版本,則使用系統上的可用版本。這適用於開發人員,因爲最新版本具有她需要的功能。但是如果功能在相同gem的未來版本中丟失,並且該版本未在Gemfile中指定,那麼爲不同人或不同機器安裝的所有gem將產生不希望的效果。

我已經面對這些問題,特別是對於分頁3的候選版本。

+0

實際上,如果你分享Gemfile.lock,那麼你上面提到的問題將不會上升。由於第一次開發人員添加gem並運行'bundler',該版本被鎖定,並且將由Gemfile.lock的所有開發人員使用。 我真正想知道的是 - 由於Gemfile.lock專門用於鎖定版本,我們是否應該在Gemfile中指定版本作爲授權? – rtdp

6

我認爲最好是不是在Gemfile中指定gem版本。在極少數情況下,可能需要指定一個版本 - 例如,新版本何時會破壞您的應用程序。但爲所有的寶石指定版本通常是矯枉過正的。 Gemfile.lock文件(您不需要編輯,但是您可以檢查版本控制)將保持您的應用程序不會使用更新的gem版本,除非您明確升級到它們。

+0

是的,我同意你的魯德。我還更新了我正在尋找什麼的問題。謝謝。 – rtdp

相關問題