【问题标题】:jhipster liquibase diff herokujhipster liquibase diff heroku
【发布时间】:2017-01-15 03:56:21
【问题描述】:

我创建了一个非常简单的 Jhipster 应用程序并将其部署到 Heroku。一切正常,所以我在我非常简单的对象中添加了一个新字段并重新部署。我收到以下错误:

2016-09-07T12:32:49.375947+00:00 heroku[router]: at=info method=POST path="/api/tsts?cacheBuster=1473251569324" host=deplyjhip.herokuapp.com request_id=2b7190f7-0301-456d-87a9-7342640aad9d fwd="5.2.192.47" dyno=web.1 connect=0ms service=17ms status=500 bytes=532
2016-09-07T12:32:49.361875+00:00 app[web.1]: 2016-09-07 12:32:49.361 ERROR 3 --- [io-40257-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: column "amend" of relation "tst" does not exist
2016-09-07T12:32:49.361530+00:00 app[web.1]: 2016-09-07 12:32:49.361  WARN 3 --- [io-40257-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42703

我知道会发生什么。当我重新部署时:

./gradlew -Pprod bootRepackage -x test
heroku deploy:jar --jar build/libs/*war

它没有运行./gradlew liquibaseDiff

如何运行 liquibase diff 并将更改应用到 heroku DB?

【问题讨论】:

    标签: heroku liquibase jhipster


    【解决方案1】:

    接受的答案并不能真正解决所提出的问题。问题是为什么jhipster heroku 即使在定义了新的迁移之后也不运行liquidbase 迁移脚本。

    只需将此作为单独的行添加到 Procfile 中

    release: ./mvnw liquibase:update
    

    或者您可以在 heroku 上应用的运行控制台中手动运行此命令

    ./mvnw liquibase:update
    

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的问题。我使用jhipster entity foo 添加了一个新属性,然后运行./mvnw liquibase:diff,然后我使用heroku deploy:jar target/*.war,它给了我同样的错误。关系“xxx”的“xxx”列不存在。我没有找到任何解决方案:(但是从heroku中删除数据库,然后运行jhipter heroku

      【讨论】:

        【解决方案3】:

        为了运行./gradlew liquibaseDiff,我在 gradle/liquibase.gradle 中设置了 db 连接详细信息,如下所示:

        args "--username=USERNAME"
        args "--password=PASSSWORD"
        args "--url=jdbc:postgresql://ec2-BLA.bla.eu-west-1.compute.amazonaws.com:5432/DATABASENAME?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory"
        

        没有:ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

        这生成了更改日志,因此我将其添加到 master.xml 并重新部署应用程序(基本上是 David Steiman 回答的第 2 步)

        【讨论】:

          【解决方案4】:

          这似乎您没有完全迁移您的新领域。看起来您只是将属性添加到域包中的 Entity 类中,但没有进行任何 liquibase 迁移。您有两种选择来实现这一目标:

          1. 手动迁移

          只需在 src/main/resources/config/liquibase/changelog 目录中创建一个“YYYYMMDDHHmmss_add_field_to_my_entity.xml”,内容如下:

          <?xml version="1.0" encoding="utf-8"?>
          <databaseChangeLog
              xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
          
              <changeSet id="YYYYMMDDHHmmss" author="you">
                  <addColumn tableName="your_table">
                      <column name="column_name" type="??" />
                  </addColumn>          
              </changeSet>
          </databaseChangeLog>
          

          让你的改变发生。 不要编辑一些变更日志文件,过去已经迁移了!

          1. 将字段添加到您的数据库,然后liquibase:diff 在这里,您可以使用您知道的工具编辑您的数据库,以便通过添加该列。 SQL,然后运行 ​​./mvnw liquibase:diff./gradlew liquibaseDiffChangelog 以生成迁移

          【讨论】:

          • 我知道这种情况正在发生,我现在在本地修复这个问题,但我不知道如何针对 Heroku 数据库执行此操作
          • 如果您的迁移失败,只有另一个迁移才能解决此问题...在最坏的情况下,您将不得不擦除您的数据库或手动连接以解决该问题
          猜你喜欢
          • 2015-12-28
          • 2023-04-11
          • 1970-01-01
          • 2020-05-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-23
          • 1970-01-01
          • 2011-06-23
          相关资源
          最近更新 更多