Playframework 2.0 如何将处于不一致状态的数据库标记为在生产中使用Play解决

Playframework 2.0 如何将处于不一致状态的数据库标记为在生产中使用Play解决,playframework-2.0,Playframework 2.0,我在以下环境中使用Scala Play 2.3.1版 笔记本电脑的开发 使用Heroku部署进行测试 与一个 Heroku部署 我正在使用evolutions对数据库结构进行更改。删除索引和添加其他索引有点复杂。这是进化5。测试和直播目前在进化4上 如果我在我的开发机器上吹走数据库,应用程序就会按预期工作。如果我部署测试,当我访问任何网页时,我会收到“应用程序错误” 在我得到的日志中: play-Run with-DapplyEvolutions.default=true和 -DapplyDow

我在以下环境中使用Scala Play 2.3.1版

笔记本电脑的开发 使用Heroku部署进行测试 与一个 Heroku部署 我正在使用evolutions对数据库结构进行更改。删除索引和添加其他索引有点复杂。这是进化5。测试和直播目前在进化4上

如果我在我的开发机器上吹走数据库,应用程序就会按预期工作。如果我部署测试,当我访问任何网页时,我会收到“应用程序错误”

在我得到的日志中:

play-Run with-DapplyEvolutions.default=true和 -DapplyDownEvolutions.default=true如果您想自动运行它们,包括停机,请小心,尤其是当您的机器停机时 进化删除现有数据数据库“默认”需要进化! 哦,无法启动服务器

我确实设置了-DapplyEvolutions.default=true,但我没有启用“down”,它们是破坏性的,我不想在通过Sql Squirrel访问数据库时执行它们,我发现如下内容

5排 每列“applied_at”中都有一个数据,包括第5行 每列“state”中都有“applicated”值 我调查了数据库,并应用了evolution 5

因此,如果我在开发模式下运行,我可能会得到“数据库默认值处于不一致状态”的网页。我会单击“标记它已解决”按钮,然后继续


在“生产模式”下运行时,我如何做到这一点?

我从Google Group Play框架收到了这个答案

不幸的是,如果运行,则无法“将数据库标记为已解决” 该应用程序处于Prod模式。我认为这是游戏中的一个问题,可以吗 请你就此提出一个问题 ?

要解决您的问题,您可以在开发模式下运行应用程序 使用sbt run,然后单击web浏览器中的按钮, 或者手动更新play_evolutions表,将冲突标记为 这里解决的问题是如何通过播放完成的:

提出这个问题后,我手动执行了以下操作

update play_evolutions set state = 'applied' where state = 'applying_up' and id = " + revision
delete from play_evolutions where state = 'applying_down' and id = " + revision

这并不能解释我所有的症状:但我很容易就有两个问题。例如,当我查看play_evolution表时,没有“applying_up”或“applying_down”。不过,这肯定“解决”了这部分问题,并在很大程度上帮助我了解了发生的情况

或许可以备份您的生产数据库,并通过本地应用程序连接到它,看看它说了些什么?我通常在应用大型演进时这样做,否则我会得到一个引导超时。谢谢你的建议,我将遵循它。测试数据库大约是半个字节。几天前我试过这个,只需按下mark resolved按钮,一切都正常。我现在将再次尝试,看看日志是否在本地提供了更好的消息。我没有得到一个启动超时:进化实际上已经被应用,新的索引已经就位了,这是多么令人讨厌。它运行良好。没有“您的数据库处于不一致状态”或任何内容。尽管如此,我认为我将来也会遇到类似的问题,我想了解当进化出错时如何处理它们。我认为,能够“以正确的配置获取数据库”,然后“将其标记为已解决”,这为我提供了一套非常有用的工具。