【发布时间】:2013-01-30 23:45:06
【问题描述】:
似乎每当我更改模型时,Play Framework 都会要求我运行一个脚本来删除我的整个架构并重新创建它。显然这不适用于生产,那么在生产中处理这个问题的正确方法是什么?
注意,我使用的是 ebean 和 Postgres,并托管在 heroku 上。
【问题讨论】:
标签: java postgresql playframework playframework-2.0 playframework-evolutions
似乎每当我更改模型时,Play Framework 都会要求我运行一个脚本来删除我的整个架构并重新创建它。显然这不适用于生产,那么在生产中处理这个问题的正确方法是什么?
注意,我使用的是 ebean 和 Postgres,并托管在 heroku 上。
【问题讨论】:
标签: java postgresql playframework playframework-2.0 playframework-evolutions
很遗憾Ebean 只能创建CREATE DDL(而不是UPDATE DDL)(作为answered on their group),因此您需要尽快切换到manual evolutions。
一些规则:
1.sql 由它创建的进化,它会重新创建整个 DDL1.sql 中删除两个第一个 cmets,并开始编写自己的演进,下一个编号为2.sql、3.sql 等。在切换到手动演进之前尝试放置尽可能多的模型/字段。最大的部分将由插件自动完成。ALTERS 到现有的表/列而不是 DROP/CREATE,它们应该同时具有:Ups 和 Downs 用于每个更改。事实上,有时使用 DB gui 修改 DB 结构更容易,无论如何它主要适用于单个开发人员...当您需要与其他开发人员共享代码时,编写演变将是更好的选择。
如果一段时间后您将添加新模型的下一个“大”部分,您可以再次启用临时自动 DDL 并使用本地 git 来复制新部分。然后恢复到自己的革命并粘贴由Ebean插件生成的新部分。
【讨论】:
Biesior 基本上总结得很好。但是,作为 Play 的初学者,我发现用一个具体的例子进行更多的说明可能会有所帮助。
首先,以下示例适用于 Java。
假设你添加了一个新字段
public String dum_str;
在您的模型 Dum 中。然后,您需要在conf/evolutions/ 下有一个2.sql,如下所示:
# --- !Ups
ALTER TABLE dum ADD COLUMN dum_str VARCHAR(255);
# --- !Downs
ALTER TABLE dum DROP dum_str;
我希望这会有所帮助。
【讨论】: