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

时间:2013-01-30 23:45:06

标签: java postgresql playframework playframework-2.0 playframework-evolutions

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

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

3 个答案:

答案 0 :(得分:31)

不幸的是,Ebean只能创建CREATE DDL(而不是UPDATE DDL)(因为answered on their group),因此您需要尽快切换到manual evolutions

一些规则:

  1. 在实施任何更改之前始终备份您的实时数据库:)
  2. ebean插件重新创建整个DDL,如果它只创建1.sql进化
  3. 您需要从1.sql删除两个第一条评论,然后开始使用下一个数字2.sql3.sql编写自己的演变文字等。尝试在切换之前放置尽可能多的模型/字段手动演变。最重要的部分将由插件自动完成。
  4. 手动演进应该包含ALTERS到现有的表/列而不是DROP / CREATE,它们应该同时包含UpsDowns
  5. 尽量在每次演变中放置尽可能多的变化,然后管理更容易,然后为每个小变化编写单独的演变。
  6. 事实上有时候用DB gui修改数据库结构会更容易,无论如何它主要适用于单个开发人员...当你需要与其他开发人员共享代码时,编写演进将是更好的选择。

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

答案 1 :(得分:12)

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

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

假设您添加了一个新字段

public String dum_str;

在你的模特Dum。然后,您需要2.sql下的conf/evolutions/,如下所示:

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

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

我希望这会有所帮助。

答案 2 :(得分:-3)

将当前数据库备份为脚本。 在Java模型中进行更改。 让Play应用更改并重新创建数据库 然后恢复您的数据。

Attn:不要改变现有的字段名,否则它不会起作用。