只是想知道每个人如何在Heroku上将更新推送到他们的生产服务器,而不会让应用程序停止几秒钟?
推送Heroku(特别是使用像Unicorn这样的东西)需要一段时间才能加载网页应用。特别是当有最终用户试图访问该网站时。他们最终得到503页。加载Unicorn进程需要30秒到一分钟。
答案 0 :(得分: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/
这些两个解决方案必须完成,因为数据库迁移必须在代码的两个(实时和即时)版本中运行。一旦你有了这个工作,那么你可以解决第二个问题,让应用程序本身看起来不像它已经失效。一旦推动开始,就没有支持的方式来旋转和旋转单个dynos。
<强>更新强> Heroku现在提供测试版功能。要在推送之前使用以下操作:
heroku labs:enable -a APP_NAME preboot
这会在推送期间更改应用的行为。它将推升一个将热身两分钟的并行实例。推送几乎两分钟后,所有流量都将路由到新的应用程序。如上所述,请注意迁移,因为它们仍然是一个问题。
答案 1 :(得分:4)
Heroku目前正在测试新的preboot feature测试版。你可能想看看它。不幸的是,它仅适用于≥2网络dynos。它似乎也不适用于heroku scale web=…
,这对于使其与HireFireApp.com一起使用非常重要。