如何在生产中处理Play Framework 2数据库演变

Tom*_*ant 16 java postgresql playframework playframework-2.0 playframework-evolutions

似乎每当我更改模型时,Play Framework都会要求我运行一个删除整个模式并重新创建它的脚本.显然这不适合生产,那么在生产中处理这个问题的正确方法是什么?

注意,我正在使用ebean和Postgres,并在heroku上托管.

bie*_*ior 31

不幸的是,Ebean只能创建CREATE DDL (而不是UPDATE DDL)(在他们的小组中回答),因此您需要尽快切换到手动演进.

一些规则:

  1. 在实施任何更改之前始终备份您的实时数据库
  2. 如果它只有1.sql由它创建的进化,那么ebean插件会重新创建整个DDL
  3. 你需要从去除两个第一的意见1.sql,并开始与下一个数字书写自己的变阵2.sql,3.sql等尝试切换到手动变阵之前,尽可能多的模型/领域尽可能放置.最大的部分将由插件自动完成.
  4. 手动演进应包含ALTERS现有的表/列而不是DROP/CREATE,它们应该同时具有:UpsDowns每次更改.
  5. 尽量在每次进化中放置尽可能多的变化,然后管理更容易,然后为每个小变化编写单独的进化.

事实上,有时用DB gui修改数据库结构会更容易,无论如何它主要适用于单个开发人员...当你需要与其他开发人员共享代码时,编写演进将是更好的选择.

如果在一段时间后你将添加下一个"大"部分的新模型,你可以再次启用临时自动DDL并使用本地git来复制新部件.然后恢复自己的革命并粘贴Ebean插件生成的新部件.


JBT*_*JBT 12

Biesior基本上总结得很好.但是,作为Play的初学者,我发现通过具体示例进行更多澄清可能会有所帮助.

首先,以下示例适用于Java.

假设您添加了一个新字段

public String dum_str;
Run Code Online (Sandbox Code Playgroud)

在你的模型Dum.那么,你需要一个这样的2.sqlconf/evolutions/:

# --- !Ups
ALTER TABLE dum ADD COLUMN dum_str VARCHAR(255);

# --- !Downs
ALTER TABLE dum DROP dum_str;
Run Code Online (Sandbox Code Playgroud)

我希望这会有所帮助.