如何在不放下应用的情况下推送到Heroku

时间:2012-04-19 23:44:04

标签: ruby-on-rails ruby-on-rails-3 heroku

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

推送Heroku(特别是使用像Unicorn这样的东西)需要一段时间才能加载网页应用。特别是当有最终用户试图访问该网站时。他们最终得到503页。加载Unicorn进程需要30秒到一分钟。

2 个答案:

答案 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一起使用非常重要。