2012-03-21 58 views
2

我們在我們的服務器上運行2個不同的環境 - 說,production.mydomain.com和staging.mydomain.comRuby on Rails *特性*部署的最佳實踐?

臨時環境是幾乎相同的生產環境,但它往往有幾個新的特點正在被審查(例如new_user_profile,image_tagging等)。這些功能在不同的時間被客戶單獨接受。

什麼是推動任何單個功能(例如new_user_profile)從分期到生產的最佳方式?

我們的設置如下所列,但想聽到的替代品,你還可以使用:

  • Ruby on Rails的
  • 的Git(我們有幾個特性分支,其中獲得合併成一個「分期」分支當接近完成時)
  • 卡皮斯特拉諾,與多級分機。

我們曾嘗試以下兩種方法,無論是其中的工作非常好:

  1. 有很多,如果在我們的代碼,例如/ else語句如果new_user_profile ....
  2. 單獨部署git分支(例如分支new_user_profile)到分期,得到這個審查,然後合併到生產

回答

2

如果沒有額外的如果,你最好的選擇很可能是功能分支合併到主時,他們已經準備好部署。或者,您可以實現功能切換模式。我不知道它有一個共同的寶石,但我在我自己的項目中使用了類似的模式。 Martin Fowler寫了一篇關於功能的好帖子,如果您想查看,請打開here。他提出了一個非常有效的論點,即功能分支與持續集成的想法背道而馳。只要分支機構正在通過CI服務器運行,但您的milage可能會有所不同,我對此感覺並不那麼強烈。我想看到的只是用塊與功能撥動一個好的圖書館,所以你可以這樣做:

with_feature :something do 
    #code that should only be enabled with :something feature 
end 

不知道應該是一個很好的實現解決方案的雖然。做一個寶石,並把它在github :)

+0

傢伙從learnable.com已經發布了功能翻轉寶石我們使用的基礎上,Etsy的是如何做到這一點:https://開頭的github .com/pda/flip – 2012-03-21 08:58:01

+0

謝謝,flip gem看起來不錯,Martin Fowler的文章很有幫助。 – 2012-03-23 04:30:44

1

我認爲你應該保持自己的分支中的每個新功能。在第一次測試合併master後,您可以將其與staging合併。

你可以嘗試git cherry-pick的舉動犯的另一種方法是屬於new_user_profilestagingmaster

5

使用此工作流程:

  1. 使用主分支的分公司生產,它總是通過測試,併爲每個功能部署
  2. 使用分支,並在GitHub上引入請求或Merge公司要求對Gitlab
  3. 使用CI服務(https://travis-ci.org/https://circleci.com/)像http://teatro.io/階段,該階段將用於前夕自動創建並行階段合併
  4. 使用特殊服務之前檢查新的分支代碼ry功能分支。發送功能階段的鏈接到客戶端。通過CI和cutsomer測試
  5. 合併分支掌握和部署到生產環境