Ruby on Rails *功能*部署的最佳实践?

时间:2012-03-21 06:23:58

标签: ruby-on-rails ruby capistrano production staging

我们在服务器上运行2个不同的环境 - 比如,production.mydomain.com和staging.mydomain.com

暂存环境几乎与生产环境完全相同,只是它通常有几个正在审核的新功能(例如new_user_profile,image_tagging等)。这些功能在不同时间由客户单独接受。

将任何单个功能(例如new_user_profile)从分段推送到生产的最佳方法是什么?

我们的设置如下所示,但我们也希望听到您使用的替代方案:

  • Ruby on Rails
  • Git(我们有几个功能分支,在接近完成时会合并到" staging"分支)
  • Capistrano,多阶段分机。

我们尝试了以下两种方法,两种方法都不是很好用:

  1. 在我们的代码中包含大量if / else语句,例如new_user_profile ....
  2. 将个别git分支(例如分支new_user_profile)部署到分段,进行审核,然后合并到生产

3 个答案:

答案 0 :(得分:5)

使用此工作流程:

  1. 使用master分支作为生产分支,它始终通过测试和可部署的
  2. 在Gitlab上使用每个功能的分支和GitHub上的请求或合并请求
  3. 使用CI服务(https://travis-ci.org/https://circleci.com/)在合并前检查新的分支代码
  4. http://teatro.io/等阶段使用特殊服务,这将为每个功能分支自动创建并行阶段。将feature-stage的链接发送给客户。
  5. 由CI和cutomer测试的合并分支,以掌握并部署到生产

答案 1 :(得分:2)

如果没有额外的ifs,您最好的选择可能是在准备部署时将功能分支合并到主服务器中。或者,您可以实现功能切换模式。我不知道它有一个共同的宝石,但我在自己的项目中使用了类似的模式。 Martin Fowler写了一篇关于功能切换here的好文章,如果你想查看的话。他提出了一个非常有效的论点,即功能分支违背了持续集成的想法。我不是那么强烈,只要分支机构通过CI服务器,但你的milage可能会有所不同。我想看一个好的库,只使用具有功能切换功能的块,所以你可以这样做:

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

虽然不知道一个很好的解决方案。制作一个宝石并将其放在github上:)

答案 2 :(得分:1)

我认为你应该将每个新功能保留在自己的分支中。在测试与staging合并后,您可以首次将其与master合并。

您可以尝试git cherry-pick移动提交的另一种方式属于从new_user_profilestaging的{​​{1}}