多阶段部署建议?

时间:2009-06-01 14:23:40

标签: ruby-on-rails git deployment capistrano

Web应用程序的多阶段部署有哪些最佳实践和一般理论?

我对使用Git,Capistrano和Passenger部署Rails应用程序特别感兴趣,我发现帖子讨论了这个过程的细节:

对于每个阶段(测试,分期,生产),我应该考虑哪些因素?这些阶段应该部署到不同的物理服务器吗?有关多阶段部署的任何提示或建议?我应该留意哪些障碍?

最好的,

雅各

3 个答案:

答案 0 :(得分:1)

我总是为每个部署目标创建上限任务,并在命令行中使用它们:

# deploy.rb
task :stage do
  server 10.0.0.1 ...
end

> cap stage deploy

您还可以在每个目标任务中定义自定义任务,例如在暂存中执行清理但未在生产中执行清理的部署。

由于这些部署目标任务很少很大,我从来没有真正看到过为多阶段安装帽子扩展的问题,但我认为其他情况可能会有所不同。

我确实认为生产应该与您的其他环境分开,否则会导致分段等行为不当的行为影响生产绩效。

有时我会定义cap任务以方便暂存,例如爆破数据库并从最近的生产转储中重新加载它。这些任务应该通过set变量等检查他们的部署目标,并拒绝运行生产作为深夜错字的保险。

在deploy.rb中放置大量自定义行为很诱人,但我发现这往往会让人感到厌烦,需要大量的维护工作,因为你的环境或帽子api的变化。

我在大型环境中看到的另一种做法是拥有一个带有结帐的shell帐户,该结帐跟踪专门设置为充当capistrano控制点的稳定分支。你在那里ssh并运行cap命令而不是本地。这有助于避免本地检出的deploy.rb具有您尚未准备好部署到生产的修改的问题。这对于git vs svn来说不是一个问题,但是在他们运行cap命令的那一刻,我们必须小心考虑他们的本地deploy.rb是什么。

Heroku现在真的很容易让这些东西变得容易,而EY和其他人并没有完全落后。

答案 1 :(得分:0)

最好有两种不同的服务器环境:登台和生产。我总是忽略测试环境。测试环境就像生产一样,但在完成后回滚数据库。在同一服务器上运行可能会对生产环境的性能和稳定性产生负面影响。升级宝石以在临时环境中进行测试可能会对生产造成负面影响并导致停机时间成本降低。

您必须非常警惕两台服务器上的相同gem版本。如果某个版本的应用程序在暂存期间工作但由于这种差异而无法生产,则会造成麻烦。

我总是打开一个控制台窗口,准备回滚最后一次部署,以防出现问题。这个过程确实没有多少。

节省一些钱并购买最便宜的登台服务器。你是唯一一个会使用它的人,对吧?只需确保它们来自同一个提供商。

答案 2 :(得分:0)

我们已成功使用capistrano多级部署超过一年。系统以与Rails环境文件几乎相同的方式很好地分离每个阶段的部署文件。设置和管理非常简单。