我正在使用Scala Play版本2.3.1以及以下环境
我正在使用evolutions对数据库结构进行更改。涉及删除索引和添加其他索引有点复杂。这是进化5.测试和现场正在进化4。
如果我在开发机器上吹掉数据库,应用程序将按预期工作。如果我部署测试,当我访问任何网页时,我会收到“应用程序错误”
在日志中我得到:
play - 使用-DapplyEvolutions.default = true运行 -DapplyDownEvolutions.default =如果你想自动运行它们是真的,包括下降(小心,特别是如果你的下来 evolutions丢弃现有数据)数据库'默认'需要进化! 糟糕,无法启动服务器。
我确实有-DapplyEvolutions.default = true设置,但我没有启用'down'(它们具有破坏性,我不想执行它们)当我通过Sql Squirrel I进入数据库时找到以下
我已经调查了数据库并且已经应用了进化5。
因此,如果我在开发模式下运行,我可能会得到网页'数据库默认处于不一致状态'。我会点击“标记已解决”按钮,然后我可以继续
在“生产模式”下运行时如何执行此操作?
答案 0 :(得分:2)
我从Google Group Play-Framework
收到了这个答案不幸的是,如果您运行,则无法“将数据库标记为已解析” 在Prod模式下的应用程序。我认为这是Play中的一个问题,可以 请你提出一个问题 (http://github.com/playframework/playframework/issues)?
要解决您的问题,您可以在开发模式下运行该应用程序 (使用
sbt run
),然后点击网络浏览器中的按钮, 或手动更新play_evolutions表以将您的冲突标记为 已解决(这是Play如何完成的: https://github.com/playframework/playframework/blob/master/framework/src/play-jdbc/src/main/scala/play/api/db/evolutions/EvolutionsApi.scala#L297-L311)。
提出问题后,我手动执行了以下操作
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表时,没有“apply_up”#39;或者' applied_down'。然而,这肯定已经解决了#39;问题的这一部分,并且对我对正在发生的事情的理解有所帮助