我在以下环境中使用Scala Play版本2.3.1
Heroku部署
我正在使用演进对数据库结构进行更改。这有点复杂,涉及删除索引和添加其他索引。这是演进5。测试和在线发布目前处于演进4。
如果我在开发机器上删除了数据库,则该应用程序将按预期运行。如果我部署进行测试,则在访问任何网页时都会收到“应用程序错误”
在日志中,我得到:
播放-使用-DapplyEvolutions.default = true运行
-DapplyDownEvolutions.default = true,如果您想自动运行它们,包括停机(请注意,尤其是停机时
进化会删除现有数据)数据库“默认”需要进化!
糟糕,无法启动服务器。
我实际上确实设置了-DapplyEvolutions.default = true,但是我没有启用“downs”(它们是破坏性的,并且我不想执行它们)当我通过Sql Squirrel进入数据库时,我发现以下内容
我已经研究了数据库,并应用了Evolution 5。
因此,如果我在开发模式下运行,则可能会得到网页“数据库默认处于不一致状态”。我将点击“标记为已解决”按钮,然后我可以继续
在“生产模式”下运行时该怎么办?
最佳答案
我收到了来自Google Group Play框架的答复
不幸的是,如果运行,则无法“将数据库标记为已解决”
产品模式下的应用程序。我认为这是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表时,没有“applying_up”或“applying_down”。但是,这肯定可以“解决”问题的这一部分,并且对我对正在发生的事情的理解有很大帮助