2015-01-08 79 views
1

我从蟒蛇的世界即将到来,Django的地方通常我们的部署流程是如下:Grails的部署 - 手动分贝迁移

  1. 焦油/ GZ我们的代码发布
  2. 解包的生产
  3. 运行分贝迁移手动经由南
  4. 运行程序

Grails是比Python/django的毫安有点不同因为最终产品是一场编纂的战争。我最大的问题是手动数据库迁移。我不想自动运行它,我看到的一个建议解决方案是使用dbm-update-sql生成手动sql文件,但为了生成它,我需要我的本地数据库具有与生产数据库相同的版本 - 我不'不喜欢它。

还有其他建议吗?它看起来像我手动运行它的唯一方法是在机器上部署源代码并在那里运行dbm命令。

回答

0

我会强烈建议部署源到生产系统。由于您希望手动控制数据库迁移,而不需要使用Grails应用程序的正常流程,所以我建议您使用liquibase作为独立工具。

很明显,因为你不希望管理有您的生产模式的副本,以差异反对这种将是大量的手工工作,为您(例如保存您的更改是最新的)。

数据库迁移插件可用于创建手动运行SQL脚本,但你需要一个生产模式,以diff的反对。我建议你领导这条路线,但你似乎反对这样做。

+0

我喜欢手动的原因是错误处理,如果迁移失败,我不希望战争加载所有,我希望它失败了,另外如果它失败我想明确的错误消息,并没有发生什么去搜索它在catalina.out –

+0

我似乎记得,如果迁移失败,应用程序将停止加载,因此不会部署。在Tomcat的情况下,catalina.out中将出现错误。同样,如果您想手动控制,请查看使用Liquibase作为独立工具(这是数据库迁移插件在内部使用的)。 –

+0

你知道使用哪个groovy dsl扩展吗?我找到了一个可能的候选人 - https://github.com/tlberglund/groovy-liquibase,但在阅读http://burtbeckwith.com/blog/?p=1774时,它看起来像插件正在实现它自己的dsl解析器。看起来如果我想去手动,那么我将不得不使用XML表示,一个真正的失望。 –

1

您可以针对生产数据库运行dbm-update-sql,它不会进行任何更改,因为它与其中的所有-sql脚本一样,可以告诉您在真正的迁移过程中会做什么。为了安全起见,请创建一个无权进行任何更改并在运行脚本时使用该用户的用户。使用该用户信息和生产连接信息在DataSource.groovy中创建自定义环境,并在运行脚本时指定该环境。