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

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

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


答案 1

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

一些规则:

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

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

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


答案 2

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

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

假设您添加了一个新字段

public String dum_str;

在您的模型中 Dum。然后,您将需要一个如下所示的under:2.sqlconf/evolutions/

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

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

我希望这将是有帮助的。


推荐