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

  • 在笔记本电脑上开发
  • 使用Heroku部署进行测试

  • Heroku部署

  • 我正在使用演进对数据库结构进行更改。这有点复杂,涉及删除索引和添加其他索引。这是演进5。测试和在线发布目前处于演进4。

    如果我在开发机器上删除了数据库,则该应用程序将按预期运行。如果我部署进行测试,则在访问任何网页时都会收到“应用程序错误”

    在日志中,我得到:

    播放-使用-DapplyEvolutions.default = true运行
    -DapplyDownEvolutions.default = true,如果您想自动运行它们,包括停机(请注意,尤其是停机时
    进化会删除现有数据)数据库“默认”需要进化!
    糟糕,无法启动服务器。

    我实际上确实设置了-DapplyEvolutions.default = true,但是我没有启用“downs”(它们是破坏性的,并且我不想执行它们)当我通过Sql Squirrel进入数据库时​​,我发现以下内容
  • 5行
  • 每列“applied_at”中都有一个数据(包括第5行)
  • 每列“状态”中的值都为“applied”

    我已经研究了数据库,并应用了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”。但是,这肯定可以“解决”问题的这一部分,并且对我对正在发生的事情的理解有很大帮助

  • 07-26 06:36
    查看更多