玩 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) 中插入测试数据?