【问题标题】:play framework 2.0 evolutions, how to mark an inconsistent state as resolved in PROD玩 framework 2.0 演进,如何在 PROD 中将不一致的状态标记为已解决
【发布时间】:2023-03-31 06:29:01
【问题描述】:

我有一个在 scala play2.0 中开发的应用程序, 它在本地成功运行,但在部署到 heroku 时失败。

失败的原因是我在本地使用的是H2数据库, 并在heroku中使用postgresql,我必须将其中一种数据类型从“clob”更改为“text”。

根据 play20 文档,现在的问题是 heroku 中的数据库处于“不一致状态”。 在 DEV 模式下(本地),您可以在 html 出现时单击“将其标记为已解决”。

如何在 heroku PROD 环境中“将其标记为已解决”? http://www.playframework.com/documentation/2.1.1/Evolutions

ps:注意,因为是新应用,我刚刚删除了数据库重新启动。 但是,在这里我要问的是在 PROD 环境中处理演变的正确方法是什么。 也就是说,这里没有解释 PROD 的“标记为已解决”问题:http://www.playframework.com/documentation/2.1.1/Evolutions

【问题讨论】:

    标签: scala heroku playframework-2.0


    【解决方案1】:

    虽然我找不到通过play 命令的方法,但您可以通过直接编辑数据库来实现。

    假设您正试图从5.sql 转到6.sql。这是你要做的:

    1. 找出并修复导致数据库进入不一致状态的问题(即手动应用您的 !Ups 并修复所有问题)。
    2. 手动应用您的!Downs,使数据库处于应用5.sql 之后的状态。
    3. 进入您的数据库,找到名为play_evolutions 的表,并查看ID 为6 的行。它应该在state 列中显示类似applying ups 的内容,并在last_problem 列中显示错误消息。
    4. 删除 ID 为 6 的行。这将使 Play 认为您处于与 5.sql 时的状态。
    5. 现在您应该可以运行 play -DapplyEvolutions.default=true start 以演变为 6.sql。

    【讨论】:

      【解决方案2】:

      不一致的状态只是意味着无法应用进化,因此应用程序被阻止。更新您的进化脚本并重新部署。

      【讨论】:

      • 你确定吗?这对我来说没有意义。对我来说,“inconsistent state”的意思是“inconsistent state”,也就是只执行了部分进化(sql脚本),playframework无法撤消也无法完成进化,所以需要人工干预,谨慎还原或者完成进化到一致的状态。
      猜你喜欢
      • 2015-02-25
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-05-05
      相关资源
      最近更新 更多