6

只是想知道每个人如何在 Heroku 上将更新推送到他们的生产服务器,而不会使应用程序停机几秒钟?

推送到 Heroku(尤其是使用 Unicorn 之类的东西)需要一段时间才能加载 Web 应用程序。特别是当有最终用户试图访问该站点时。它们最终有 503 页。加载 Unicorn 进程最多需要 30 秒到一分钟。

4

2 回答 2

6

要完成此任务,您需要做两件事,而且这不是微不足道的。

1) 迁移需要向后兼容(即,在应用程序运行时运行)。请参阅这篇文章:http: //pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/

2) 使用两个 heroku 应用程序进行部署。我向 Heroku 开了一张关于这个主题的票,这是他们的回复:

我们目前正在研究一种解决方案,以提供零停机时间部署,但没有关于何时可用的 ETA。

同时,可能的解决方法是部署到两个单独的应用程序。您可以将新代码推送到第二个应用程序,启动它,然后将域名移动到第二个应用程序。清洗并在下一次部署时重复。这不太理想,但可能会在过渡期间为您提供所需的结果。

如果你这样做,你会希望尽可能地自动化,因为有很多方法可以把它搞砸。这是关于该主题的文章: http: //casperfabricius.com/site/2009/09/20/manage-and-rollback-heroku-deployments-capistrano-style/

为什么?

两个解决方案必须完成,因为数据库迁移必须在代码的两个(实时和待实时)版本中工作。一旦你有这个工作,那么你就可以解决第二个问题,即应用程序本身似乎没有出现故障。一旦开始推送,没有支持的方式来旋转和旋转单个测功机。

更新: Heroku 现在提供了一个 beta 功能。要在推送之前使用,请执行以下操作:

heroku labs:enable -a APP_NAME preboot

这将改变应用程序在推送期间的行为。它将启动一个预热两分钟的并行实例。推送后几乎整整两分钟,所有流量都将路由到新应用程序。正如我上面提到的,小心迁移,因为它们仍然是一个问题。

于 2012-05-17T23:35:22.120 回答
4
于 2012-06-29T21:26:15.297 回答