我们的团队最近对持续部署非常感兴趣,但是我们在如何实际部署Heroku上的代码方面遇到了一些障碍 - 似乎不可避免地需要一些停机时间为Heroku做代码推送。
在传统环境中,代码部署可能如下所示:
使用Heroku,我几乎无法控制两个关键步骤:
我们目前使用维护屏幕,但如果我们进行全面的持续部署,它将不会成为可扩展的解决方案(我们可能每天大约有10-20个部署,以及10-20 * 30秒的维护屏幕开始加起来)
有没有人遇到过类似的问题?你是怎么解决的?在heroku上进行 true 持续部署的任何重要案例研究/成功案例?
答案 0 :(得分:10)
关于dynos旋转时间,Heroku有一个beta功能来解决这个问题:
https://devcenter.heroku.com/articles/labs-preboot/
它基本上会先启动你的新dynos,等待一段时间,切换流量,然后再杀掉旧的dynos。我的应用程序在部署期间看到了性能的显着提高。你可以在这里阅读:
http://ylan.segal-family.com/blog/2012/08/27/deploy-to-heroku-with-near-zero-downtime/
答案 1 :(得分:7)
在Heroku上,我们会在重启时向你的dyno发出一个SIGTERM。片刻之后,如果过程没有停止,他们将被杀死。当您没有运行迁移时,这应该允许您有足够的宽限时间来无缝重启。
您始终可以将代码推送到指向生产数据库的临时应用程序,并从那里运行迁移。 Pedro撰写了一篇关于运行零停机迁移的好文章,该文章也应该有所帮助:http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/
希望这会有所帮助。