首页 > 解决方案 > 先前进化变化的行为

问题描述

上下文:我有一个 PlayFramework 2.5 后端和 MySQL db 运行演变。我目前正在生产中运行的进化#23。但是,在生产环境中进行全新安装时,之前的演进#19 出现了一个错误,这让我更改了演进#19 以便能够在 dev 上运行所有演进。主要的变化是删除了一个外键。

假设我有

db.autoApply = true

db.autoApplyDowns = true

认为我应该将 autoApplyDowns 更改为 false,也不确定它会如何影响。

问题:如果我在生产中保存更改会发生什么?它会忽略#19,因为它已经应用了它吗?

标签: playframework

解决方案


autoApplyDowns仅影响在生产模式下运行并确定是否自动应用向下进化。我鼓励您将其设置为false.

autoApply- 导致在 Dev 中自动应用 ups 和 downs,但在 Prod 中只应用 ups。

这两个设置的默认设置是false,我个人更喜欢这样,因为如果脚本和数据库模式的状态之间有任何不同步的地方,那么 Play 将报告问题,以便您可以手动修复它们 - 它会报告这些问题当应用程序启动时(在 Prod 中)或在第一次请求时(在 Dev 中)。

最安全的选择是将两者都更改为false,丢弃您的开发数据库,​​并从头开始应用所有演变,作为对开发中任何问题的健全性检查。这对 Prod 来说是安全的,因为这意味着下次部署演进更改时只会应用 Ups。如果您此时有任何问题,Play 将在更改数据库架构之前报告问题 - 然后您将有机会在您的生产数据库上手动运行一些 SQL 以恢复同步或在您考虑问题时退出发布.


推荐阅读