Evolutions 是数据库模式升级的默认播放机制。
如果我将播放版本推送到包含多个 Web 服务器的 Heroku 设置 - heroku 怎么知道只运行一次进化?
事实上 - 一个更一般(相关?)的问题 - 如果我将版本推送到具有 N 个 Web 服务器的设置,启动顺序是什么?Heroku 是否一次启动一个?
Evolutions 是数据库模式升级的默认播放机制。
如果我将播放版本推送到包含多个 Web 服务器的 Heroku 设置 - heroku 怎么知道只运行一次进化?
事实上 - 一个更一般(相关?)的问题 - 如果我将版本推送到具有 N 个 Web 服务器的设置,启动顺序是什么?Heroku 是否一次启动一个?
文档描述了它是如何工作的。如果您使用 Postgres 或 Oracle,系统可以锁定表以确保只有一个服务器将运行演变。
如果您使用任何其他数据库,您必须禁用生产中的进化,否则您将遇到很多问题。
Heroku 默认使用 PostgreSQL(如果您启用了他们的数据库),这意味着在启用进化的情况下同时在多个节点上部署您的应用程序是安全的,Play 将负责这一点。
如果您的应用程序在多个主机上运行,则必须设置配置属性 evolutions.use.locks=true。如果设置了此属性,则使用数据库锁来确保只有一个主机应用任何 Evolution。
我对 Evolutions 了解不多,但我认为这是一个标准的迁移工具,因为它会检查当前的数据库模式迁移版本,然后运行出色的迁移?
因此,即使它在应用程序启动时运行或其他任何方式运行并运行多次,也只有其中一个进程会实际进行更改?