【发布时间】:2011-09-08 11:26:28
【问题描述】:
我们的团队最近对持续部署非常感兴趣,但在如何在 Heroku 上实际部署代码方面遇到了一些障碍 - 似乎不可避免地需要一些停机时间将代码推送到 Heroku。
在传统环境中,代码部署可能如下所示:
- 将代码推送到某个暂存目录(旧代码仍然有效)
- 针对数据库运行迁移(通常情况下,提前运行迁移更安全,并且可以防止少数会破坏代码的代码)
- 从负载平衡器中取出一半(或一定百分比的服务器)。
- 将代码部署到这些服务器。
- 如果可能,请运行某种自动冒烟测试/运行服务器,使其“热”
- 切换哪些服务器进出负载平衡器
- 冲洗并重复。
使用 Heroku,我几乎无法控制两个关键步骤:
- 我无法先运行数据库迁移。我考虑过解决这个问题的一种方法是保持数据库迁移单独分支,并首先将它们推送到 heroku - 虽然很痛苦,但可以解决问题 - 但只会加剧......
- Dyno 启动时间可能需要相当长的时间 - 显然,这更多是 Rails 的错误而不是 Heroku,但关键问题是我无法执行上述负载均衡器 shuffle 之类的操作来确保我的在将新部署的服务器放回负载平衡器之前,应用程序已准备就绪并已加载。相反,我几乎别无选择,只能给用户一个 10 到 15 秒的加载屏幕并希望获得最好的结果(如果我使用上面的数据库部署策略,那就做两次)
我们目前确实使用维护屏幕,但如果我们转向完全连续部署(我们可能每天进行大约 10-20 次部署,以及 10-20 * 30 秒的维护时间),这将不是一个可扩展的解决方案屏幕开始加起来)
有没有人遇到过类似的问题?你是怎么称呼他们的? 真正在heroku上持续部署的任何优秀案例研究/成功案例?
【问题讨论】:
标签: ruby-on-rails heroku continuous-integration