【问题标题】:How does Heroku run Evolutions only once with multiple web servers?Heroku 如何在多个 Web 服务器上只运行一次 Evolutions?
【发布时间】:2013-06-14 00:31:38
【问题描述】:
Evolutions 是数据库架构升级的默认播放机制。
如果我将播放版本推送到包含多个 Web 服务器的 Heroku 设置 - heroku 怎么知道只运行一次进化?
事实上 - 一个更一般(相关?)的问题 - 如果我将版本推送到具有 N 个 Web 服务器的设置,启动顺序是什么? Heroku 是否一次启动一个?
【问题讨论】:
标签:
heroku
playframework
playframework-2.1
playframework-evolutions
【解决方案1】:
Documentation 描述了它的工作原理。如果您使用 Postgres 或 Oracle,系统可以锁定表以确保只有一个服务器将运行演变。
如果您使用任何其他数据库,您必须在生产环境中禁用进化,否则您会遇到很多问题。
Heroku 默认使用 PostgreSQL(如果您启用了他们的数据库),这意味着在启用进化的情况下同时在多个节点上部署您的应用是安全的,Play 会处理这个问题。
如果您的应用程序在多个主机上运行,您必须设置
配置属性 evolutions.use.locks=true。如果设置了这个属性,
数据库锁用于确保只有一个主机应用任何
进化。
【解决方案2】:
我对 Evolutions 了解不多,但我认为这是一个标准的迁移工具,因为它会检查当前的数据库架构迁移版本,然后运行未完成的迁移?
这样,即使它在应用程序启动时运行或其他任何方式运行并运行多次,也只有其中一个进程会实际进行更改?