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

时间:2014-12-29 12:41:40

标签: playframework-2.0

我正在使用Scala Play版本2.3.1以及以下环境

  • 在笔记本电脑上开发
  • 使用Heroku部署进行测试
  • 和...一起生活 Heroku部署

我正在使用evolutions对数据库结构进行更改。涉及删除索引和添加其他索引有点复杂。这是进化5.测试和现场正在进化4。

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

在日志中我得到:

  

play - 使用-DapplyEvolutions.default = true运行   -DapplyDownEvolutions.default =如果你想自动运行它们是真的,包括下降(小心,特别是如果你的下来   evolutions丢弃现有数据)数据库'默认'需要进化!   糟糕,无法启动服务器。

我确实有-DapplyEvolutions.default = true设置,但我没有启用'down'(它们具有破坏性,我不想执行它们)当我通过Sql Squirrel I进入数据库时找到以下

  • 5行
  • 每列'applied_at'都有一个数据(包括第5行)
  • 每个列'state'的值都为'applied'

我已经调查了数据库并且已经应用​​了进化5。

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

在“生产模式”下运行时如何执行此操作?

1 个答案:

答案 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;问题的这一部分,并且对我对正在发生的事情的理解有所帮助