2013-02-22 98 views
0

我有一個項目目前在生產,但仍在積極開發。我爲它經常添加新的寶石和功能。在我的最後一個版本之前,我的一些代碼在我的開發環境中崩潰了,我發現這是因爲我的一些寶石(特別是CarrierWave和jQuery)已更新,並且沒有使用某些代碼。紅寶石寶石的版本控制最佳實踐

我的問題是,有關版本管理寶石的最佳方式是什麼?有些人似乎說,你應該總是在你的Gemfile中指定版本號......但對於所有的寶石?一些?我知道,對於一些寶石,你可以存儲,因爲臭蟲等的版本號,但這些不談,在發展中有次在那裏我加入新的寶石,可能需要做一個bundle update以獲得新的東西工作,但不想破舊的東西。

我有很好的測試,有望推到生產之前發現了很多錯誤,但在發展的時候如何其他用戶確保寶石更新可能不會打破完全不相關的功能?

回答

1

不幸的是,如果您不希望您的應用因爲向後不兼容的寶石更新而中斷,那麼您必須指定寶石版本。我發現最好的做法是使用精子運算符~>指定寶石版本。例如:

gem carrierwave, '~>0.6.0' 

這意味着carrierwave創業板將在0.6版本被凍結,但包將安裝任何輕微的,向後兼容的更新和bug修復,這通常是遞增的最後一個數字的(0.6.1, 0.6.2 ...)。這意味着你可以更新你的捆綁包而不會冒險破壞某些東西(運行bundle update時不會再退縮)。

您還可以使用spermy操作上主要版本:

gem devise, '~>2.0' 

含義束將更新到2.1.0版本,2.2.0,2.2.1,2.3.0,但從來沒有到3.x 。

一些注意事項:

  1. 你不指定所有寶石的版本,但它是很好的做法。例如,我沒有指定我自己的寶石版本。但每個第三方寶石都有其指定的版本。否則,我會相信我的代碼,超出我的控制範圍。

  2. 你還需要有創業板的維護者一定量的信任的使用spermy操作。魯莽的維護者仍然可以在次要版本中發佈向後不兼容的更改。在這些情況下,我鎖定了次要版本(無精子操作員)。

  3. 如果指定的gem版本,你會作出分辨寶石的bundle的依賴關係的工作輕鬆了很多,這意味着他會做的要快得多。

希望有所幫助。

+0

真棒,謝謝安德烈。這是我懷疑的。所以,我應該運行'bundle show'並從這裏獲取當前版本,然後擴充我的Gemfile?還是有另一個命令顯示我應該使用更好的寶石版本? – FireDragon 2013-02-24 19:55:05

+1

我通常在我的'Gemfile.lock'中檢查版本。但'捆綁秀'也很好。 – 2013-02-25 17:53:52

+0

我最近接手一個正在生產的應用程序,它正在從git倉庫中拉出它的一塊寶石,我只是覺得這很瘋狂,因爲大多數規格現在不在我的開發機器本地運行,因爲該回購項目的負責人也有許多差異,爲什麼我不應該使用git repos進行生產的任何最佳實踐/模式? – DevDude 2014-07-09 05:28:00