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 迁移。你有两种选择来实现这一目标:
- 手动迁移
只需在 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>
让你的改变发生。 不要 编辑一些更改日志文件,过去已经迁移了!
- 将字段添加到您的数据库,然后
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
我创建了一个非常简单的 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 迁移。你有两种选择来实现这一目标:
- 手动迁移
只需在 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>
让你的改变发生。 不要 编辑一些更改日志文件,过去已经迁移了!
- 将字段添加到您的数据库,然后
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