jhipster liquibase diff heroku

jhipster liquibase diff heroku

我创建了一个非常简单的 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 数据库?

您似乎没有完全迁移您的新领域。看起来您只是将属性添加到域包中的实体 class,但没有进行任何 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 生成迁移

为了 运行 ./gradlew liquibaseDiff 我在 gradle/liquibase.gradle 中设置数据库连接细节如下:

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 步)

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

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

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

release: ./mvnw liquibase:update

或者您可以在 heroku

上您的应用程序的 运行 控制台中手动 运行 此命令
./mvnw liquibase:update