推送到Heroku(特别是使用像Unicorn这样的东西)需要一段时间才能加载Web应用程序.特别是当有最终用户试图访问该网站时.他们最终得到503页.加载Unicorn进程需要30秒到一分钟.
解决方法
1)迁移需要向后兼容(即,在应用程序运行时运行).请参阅此文章:http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/
2)使用两个heroku应用程序进行部署.我和Heroku就这个主题开了一张票,这是他们的答复:
We’re currently working on a solution to provide a zero-downtime
deploy but do not have an ETA on when this might be available.In the meantime a workaround that might be possible would be to deploy
to two separate apps. You can push new code to the second app,spin it
up,then move the domain names over to the second app. Wash and repeat
on the next deploy. This is less than ideal but might get you the
desired result in the interim.
如果你这样做,你会希望尽可能自动化,因为有很多方法可以搞砸了.这是一篇关于该主题的文章:http://casperfabricius.com/site/2009/09/20/manage-and-rollback-heroku-deployments-capistrano-style/
为什么?
必须同时完成这两个解决方案,因为数据库迁移必须在代码的两个(实时和即时)版本中工作.一旦你有了这个工作,那么你可以解决第二个问题,让应用程序本身看起来不像它已经失效.一旦推动开始,就没有支持的方式来旋转和降低单个动态.
更新:
Heroku现在提供测试版功能.要在推送之前执行以下操作:
heroku labs:启用-a APP_NAME预启动
这将在推送期间更改应用程序的行为.它将推升一个将热身两分钟的并行实例.推送几乎两分钟后,所有流量都将路由到新的应用程序.如上所述,请注意迁移,因为它们仍然是一个问题.