目标 - 在一次部署/重新启动中,我想创建一个新表并填充一些记录,因为会有代码更改期望这些数据存在。
理想 - 编写完成此任务的迁移。想象一下,我创建了我的Foo
类,生成了一个使用 来创建foo
表grails dbm-gorm-diff ....
的迁移,并使用 运行迁移grails dbm-update
。我现在有我的域类和我的数据库表。凉爽的。
现在我将编写一个填充表的新迁移。
databaseChangeLog = {
changeSet(author: "samslotsky", id: "PopulateFooTable") {
grailsChange {
change {
new Foo(bar: 'baz').save()
new Foo(bar: 'blitz').save()
}
}
}
}
我会将它添加到 changelog.groovy
include file: 'populate-foo-table.groovy'
再次运行后,我的表grails dbm-update
中没有记录。foo
这不是验证问题,因为我可以Foo
从应用程序代码中很好地创建对象。我什至不确定如何判断我的迁移是否已执行,因为断点似乎没有在迁移中捕获。
所以我想有两个很好的问题要问:
- 除了寻找副作用(即我的数据库表被填充)之外,我如何确定我的迁移甚至已经执行?
- 如何从迁移中创建新记录?我可以使用 Groovy 代码,还是我一直在编写 SQL?
我意识到我可以先创建表和域类,部署它,创建导入工具或管理界面来播种数据,然后修改代码以使用数据。我真的不想经历这一切。我应该能够像在 Rails 中那样,通过一次部署无缝地做到这一点。
谢谢!