16

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

请注意,我使用的是 ebean 和 Postgres,并托管在 heroku 上。

4

2 回答 2

31

不幸的是Ebean,只能创建CREATE DDL (而不是UPDATE DDL)(正如他们的小组所回答的那样),因此您需要尽快切换到手动进化

一些规则:

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

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

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

于 2013-01-31T00:31:38.953 回答
12

Biesior基本上总结得很好。但是,作为 Play 的初学者,我发现用一个具体的例子进行更多的说明可能会有所帮助。

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

假设您添加了一个新字段

public String dum_str;

在你的模型中。然后,您将需要这样的2.sqlconf/evolutions/

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

# --- !Downs
ALTER TABLE dum DROP dum_str;

我希望这会有所帮助。

于 2013-05-13T23:40:29.850 回答