如何在不停机的情况下将补丁部署到基于Passenger的生产Rails应用程序?

时间:2010-03-31 15:20:59

标签: ruby-on-rails passenger

我有一个基于Passenger的生产Rails应用程序,它有数千个用户。有时候我们需要应用代码补丁(我们使用git),当前进程(你可以假设没有数据迁移)是:

  • 在服务器上执行git pull origin [production-branch-name]
  • touch tmp/restart.txt重新启动Passenger

这允许我们修补服务器而不必求助于建立维护页面,这很好,但它感觉不太正确,因为它实际上不是一个正确的“部署”,我们仍然需要手动更新修订文件和我们的部署没有出现在我们使用的Hoptoad或NewRelic服务中。

理想情况下,我会运行cap production deploy并让标准的Capistrano部署脚本处理所有事情,但如果不建立维护页面,这是一件危险的事吗?这个部署过程似乎相当安全,因为新版本被部署到一个完全独立的文件夹中,并且只在流程结束时才重新创建符号链接以切换当前部署的版本,但我仍然相当偏执这会以某种方式导致请求丢失或失败。

1 个答案:

答案 0 :(得分:4)

这里没有问题cap production deploy。如果部署失败,那么之前的版本仍然很好。在当前的Passenger进程中加载​​(缓存)旧版本时,任何事情都不会失败。 touch tmp/restart.txt将获得新版本,并且全世界都很好。