如何在Play框架2.0中使用Evolutions?

5

对于play 1.x,我们可以使用play evolutions:apply命令,那么在play-2.0-beta中我该如何操作呢?

1个回答

11

Evolution:apply会在应用程序启动时自动运行。在Play 2.0-rc1中缺少一种生成演化脚本并从SBT控制台手动应用它们的方法。

但是下面是手动创建演化脚本的方法。

假设您在application.conf文件中有以下定义:

db.mydb.driver=org.h2.Driver
db.mydb.url=jdbc:h2:mem:play

Play2会在以下文件夹中查找演进:application/db/evolutions/mydb/。 在这个文件夹中,演进应该被储存为SQL文件,使用演进步骤作为文件名。

例如:

application/db/evolutions/mydb/1.sql
application/db/evolutions/mydb/2.sql
application/db/evolutions/mydb/3.sql

现在 SQL 本身具有以下结构:

# --- !Ups
create table company (
  id                        bigint not null,
  name                      varchar(255),
  constraint pk_company primary key (id));
# --- !Downs
drop table if exists company;

!Ups 用于将模型升级到下一个版本
!Downs 用于回退 !Ups

就像我在介绍中提到的,进化会在应用程序启动时自动应用。


1
我该如何将它们应用到单元测试中呢?我的测试都失败了,因为Play框架抱怨缺少演化。 - Jan
如果使用Play 2.0的specs2,可以通过以下方式运行数据库迁移: running(FakeApplication(additionalConfiguration = inMemoryDatabase())) { // blah blah } - flurdy
7
我讨厌魔法...现在魔法不起作用,如果我能手动触发进化就会非常有帮助...哦!刚才想到了,我的2.sql有一个SQL错误,进化被忽略了! - Lucas Pottersky
只有生产应用程序是自动的,我认为你必须手动申请开发。 - Setheron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接