玩 framework 2.0 演进,如何在 PROD 中将不一致的状态标记为已解决

Posted

技术标签:

【中文标题】玩 framework 2.0 演进,如何在 PROD 中将不一致的状态标记为已解决【英文标题】:play framework 2.0 evolutions, how to mark an inconsistent state as resolved in PROD 【发布时间】:2013-04-30 06:48:04 【问题描述】:

我有一个在 scala play2.0 中开发的应用程序, 它在本地成功运行,但在部署到 heroku 时失败。

失败的原因是我在本地使用的是H2数据库, 并在heroku中使用postgresql,我必须将其中一种数据类型从“clob”更改为“text”。

根据 play20 文档,现在的问题是 heroku 中的数据库处于“不一致状态”。 在 DEV 模式下(本地),您可以在 html 出现时单击“将其标记为已解决”。

如何在 heroku PROD 环境中“将其标记为已解决”? http://www.playframework.com/documentation/2.1.1/Evolutions

ps:注意,因为是新应用,我刚刚删除了数据库重新启动。 但是,在这里我要问的是在 PROD 环境中处理演变的正确方法是什么。 也就是说,这里没有解释 PROD 的“标记为已解决”问题:http://www.playframework.com/documentation/2.1.1/Evolutions

【问题讨论】:

【参考方案1】:

虽然我找不到通过play 命令的方法,但您可以通过直接编辑数据库来实现。

假设您正试图从5.sql 转到6.sql。这是你要做的:

    找出并修复导致数据库进入不一致状态的问题(即手动应用您的 !Ups 并修复所有问题)。 手动应用您的!Downs,使数据库处于应用5.sql 之后的状态。 进入您的数据库,找到名为play_evolutions 的表,并查看ID 为6 的行。它应该在state 列中显示类似applying ups 的内容,并在last_problem 列中显示错误消息。 删除 ID 为 6 的行。这将使 Play 认为您处于与 5.sql 时的状态。 现在您应该可以运行 play -DapplyEvolutions.default=true start 以演变为 6.sql

【讨论】:

【参考方案2】:

不一致的状态只是意味着无法应用进化,因此应用程序被阻止。更新您的进化脚本并重新部署。

【讨论】:

你确定吗?这对我来说没有意义。对我来说,“inconsistent state”的意思是“inconsistent state”,也就是只执行了部分进化(sql脚本),playframework无法撤消也无法完成进化,所以需要人工干预,谨慎还原或者完成进化到一致的状态。

以上是关于玩 framework 2.0 演进,如何在 PROD 中将不一致的状态标记为已解决的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Play Framework 2.0 中使用相对路径访问资源文件?

如何在 Play Framework 2.0 (Scala) 中插入测试数据?

玩!框架+Ebean

如何使用 .NET compact framework 2.0 播放 MIDI 文件?

如何在 Play Framework 2 中测试数据库演化

如何迁移 .NET Framework 应用程序? [3.5 到 2.0]