将生产设置与数据库迁移插件一起使用

Posted

技术标签:

【中文标题】将生产设置与数据库迁移插件一起使用【英文标题】:Using production settings with database migration plugin 【发布时间】:2012-07-10 00:00:09 【问题描述】:

我正在尝试遵循教程here。

我已经在我的 BuildConfig.groovy 文件中使用runtime ":database-migration:1.0" 声明了数据库迁移插件的依赖关系,然后进行了编译。我还在我的 DataSource.groovy 文件中注释掉了我的生产设置的dbCreate 行。我的生产数据库是空的,里面没有表。

然后我尝试运行这两个命令来生成我的初始更改日志:

grails dbm-create-changelog
grails prod dbm-generate-gorm-changelog --add changelog-1.0.groovy

问题是第一个命令在我的开发数据库中创建表,而不是在我的生产数据库中。然后第二个命令无法创建它应该创建的changelog-1.0.groovy 文件(我假设),因为生产数据库从未创建任何表。我收到几个错误,说 Hibernate 无法索引数据库,并且我遇到了一堆这样的错误:

| Error 2012-07-10 08:40:28,704 [Compass Gps Index [pool-11-thread-2]] ERROR util.JDBCExceptionReporter  - Table 'mygrailsapp_prod.some_class' doesn't exist

即使我在 DataSource.groovy 文件中注释掉我的开发设置,Grails 仍在寻找我的开发数据库。我应该指出,如果我将prod 从第二个命令中删除,changelog-1.0.groovy 文件生成正常,但我不清楚是否会因为它是从开发数据库(其中没有表)生成的而被搞砸直到我运行第一个命令)而不是生产数据库。

我在这里做错了什么?

【问题讨论】:

【参考方案1】:
The problem is the first command creates tables in my development database, not my production database.

这可能是因为它是针对开发环境运行的,而您仍然将其 dbCreate 设置为“更新”

Then the second command fails to create the changelog-1.0.groovy file it is supposed to create (I assume) because the production database never had any tables created.

这并不完全准确。从您发布的链接中,它在该步骤之后说:“请注意,您的数据库将保持为空!”只有在执行 dbm-update 命令时才会创建数据库表。那是更改日志实际执行的时间。

我认为您链接到的博客在第二个命令的 prod 开关上并不完全准确。关于您的域的任何内容都不是特定于环境的。所以把它关掉,你应该能够继续前进。我不确定为什么会抛出该错误。真的没有道理。

【讨论】:

我实际上已经尝试过了。当我在第一个命令前面加上prod 时,我得到了与第二个命令相同的错误。 因此,当您运行“grails prod dbm-create-changelog”时,会出现“mygrailsapp_prod.some_class 不存在”表错误? 正确。这与我运行 grails prod dbm-generate-gorm-changelog --add changelog-1.0.groovy 时出现的错误完全相同 从技术上讲,dbm-create-changelog 所做的只是创建一个空的更改日志文件。所以我想在它前面包括 prod 并不重要。我要编辑我的答案... 我其实没想到在运行任何一个命令后都会生成任何表格,但第一个命令确实生成了表格。

以上是关于将生产设置与数据库迁移插件一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel 迁移与 AWS Redshift 数据库一起使用

RabbitMQ通过shovel插件迁移数据

实践丨RabbitMQ通过shovel插件迁移数据

如何将 Flyway 迁移与单个架构和多个项目一起使用

耳部部署期间的飞路迁移

Laravel 5.5 使用生产数据库整合迁移