Я создал очень простое приложение 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?

1
user1995187 7 Сен 2016 в 15:40

3 ответа

Лучший ответ

Похоже, вы не полностью перенесли свое новое поле. Похоже, вы только что добавили атрибут к классу Entity в пакете домена, но не перенесли никакой миграции. У вас есть два варианта достижения этого:

  1. ручная миграция

Просто создайте "YYYYMMDDHHmmss_add_field_to_my_entity.xml" в каталоге src / main / resources / config / liquibase / changelog с таким содержимым, как

<?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 для генерации миграции
3
David Steiman 7 Сен 2016 в 23:36

У меня точно такая же проблема. Я использовал jhipster entity foo, добавил новый атрибут и запустил ./mvnw liquibase:diff, затем я использую heroku deploy:jar target/*.war, это дает мне ту же ошибку. столбец «xxx» отношения «xxx» не существует. Я не нашел никакого решения: (но удалите базу данных из heroku, затем запустите jhipter heroku

0
Chaos 31 Янв 2019 в 21:47

Чтобы запустить ./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 и повторно развернул приложение (в основном шаг 2 из ответа Дэвида Стеймана)

0
user1995187 9 Сен 2016 в 10:57