bug/help Profile prod doesn't run migrations
agilob opened this issue · comments
I deployed a project using the generated app.yml (had to put postgres.yml inside the file due to old docker-compose on server which doesn't recognise external/imported services), application connected to the database, but no migrations were run, no tables were created. It works all fine on dev when I run in h2 database, but when deployed in docker using prod it doesn't start liquibase migrations. Has anyone else seen this?
Attempt to login causes hibernate error "table doesnt exist", so it queries correctly.
So you start the docker image not the jar directly? I usually don't start it via app.yml/docker so I need to check.
It looks like the environment variable in the app.yml
is not correct. At least it doesn't fit the schema in the properties.
datasources:
default:
url: "<%-dbUrl%>"
username: "<%=dbUser%>"
VS just JDBC_URL
in the app.yml
can you try DATASOURCES_DEFAULT_URL=jdbc:postgresql://XYZ-postgresql:5432/XYZ
in the app.yml
?
I run /mvnw -Pprod verify jib:build
which builds the docker image and uploads it to my private repo. Then pull it from the repo and start using docker-compose. I think JDBC_URL in docker-compose also isn't correct, but for this project I configured db access from application-prod.yml.
Will give it a try now:
environment:
- _JAVA_OPTIONS=-Xmx512m -Xms256m
- MICRONAUT_ENVIRONMENTS=prod
- JDBC_URL=jdbc:postgresql://agileb-postgresql:5432/agileb
- DATASOURCES_DEFAULT_URL=jdbc:postgresql://agileb-postgresql:5432/agileb
- JHIPSTER_SLEEP=10 # gives time for other services to boot before the application
No, still doesnt run migrations
----------------------------------------------------------
Application 'agileb' is running! Access URLs:
Local: http://localhost:8080
External: http://a3c423a4900e:8080
Environment(s): [prod]
----------------------------------------------------------
13:58:00.013 [nioEventLoopGroup-1-8] WARN o.h.h.i.ast.QueryTranslatorImpl - HHH000104: firstResult/maxResults specified with collection fetch; applying in memory!
13:58:00.016 [nioEventLoopGroup-1-7] WARN o.h.h.i.ast.QueryTranslatorImpl - HHH000104: firstResult/maxResults specified with collection fetch; applying in memory!
13:58:00.067 [nioEventLoopGroup-1-7] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42P01
13:58:00.068 [nioEventLoopGroup-1-8] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42P01
13:58:00.069 [nioEventLoopGroup-1-8] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR: relation "jhi_user" does not exist
Position: 726
13:58:00.069 [nioEventLoopGroup-1-7] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ERROR: relation "jhi_user" does not exist
Position: 726
13:58:00.141 [nioEventLoopGroup-1-7] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
In that case I have no idea right now. Need to investigate further.
After 3 minutes liquibase kicked in
14:02:39.983 [pool-1-thread-1] ERROR i.m.c.d.l.LiquibaseMigrationRunner - Migration failed! Liquibase encountered an exception.
liquibase.exception.LockException: Could not acquire change log lock. Currently locked by 8e5371743230 (172.22.0.3) since 7/27/20, 9:59 AM
at liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.java:236)
at liquibase.Liquibase.update(Liquibase.java:184)
at liquibase.Liquibase.update(Liquibase.java:179)
at io.micronaut.configuration.dbmigration.liquibase.LiquibaseMigrationRunner.performUpdate(LiquibaseMigrationRunner.java:190)
at io.micronaut.configuration.dbmigration.liquibase.LiquibaseMigrationRunner.migrate(LiquibaseMigrationRunner.java:147)
at io.micronaut.configuration.dbmigration.liquibase.LiquibaseMigrationRunner.migrateAsync(LiquibaseMigrationRunner.java:123)
at io.micronaut.configuration.dbmigration.liquibase.$LiquibaseMigrationRunnerDefinition$Intercepted.$$access0(Unknown Source)
at io.micronaut.configuration.dbmigration.liquibase.$LiquibaseMigrationRunnerDefinition$Intercepted$$proxy0.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:146)
at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:60)
at io.micronaut.scheduling.async.AsyncInterceptor.lambda$intercept$3(AsyncInterceptor.java:87)
at io.micrometer.core.instrument.composite.CompositeTimer.record(CompositeTimer.java:79)
at io.micrometer.core.instrument.Timer.lambda$wrap$0(Timer.java:148)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
14:02:39.990 [pool-1-thread-1] ERROR i.micronaut.scheduling.TaskExecutors - Error occurred executing @Async method [void migrateAsync(LiquibaseConfigurationProperties config,DataSource dataSource)]: Migration failed! Liquibase encountered an exception.
io.micronaut.runtime.exceptions.ApplicationStartupException: Migration failed! Liquibase encountered an exception.
at io.micronaut.configuration.dbmigration.liquibase.LiquibaseMigrationRunner.migrate(LiquibaseMigrationRunner.java:152)
at io.micronaut.configuration.dbmigration.liquibase.LiquibaseMigrationRunner.migrateAsync(LiquibaseMigrationRunner.java:123)
at io.micronaut.configuration.dbmigration.liquibase.$LiquibaseMigrationRunnerDefinition$Intercepted.$$access0(Unknown Source)
at io.micronaut.configuration.dbmigration.liquibase.$LiquibaseMigrationRunnerDefinition$Intercepted$$proxy0.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:146)
at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:60)
at io.micronaut.scheduling.async.AsyncInterceptor.lambda$intercept$3(AsyncInterceptor.java:87)
at io.micrometer.core.instrument.composite.CompositeTimer.record(CompositeTimer.java:79)
at io.micrometer.core.instrument.Timer.lambda$wrap$0(Timer.java:148)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: liquibase.exception.LockException: Could not acquire change log lock. Currently locked by 8e5371743230 (172.22.0.3) since 7/27/20, 9:59 AM
at liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.java:236)
at liquibase.Liquibase.update(Liquibase.java:184)
at liquibase.Liquibase.update(Liquibase.java:179)
at io.micronaut.configuration.dbmigration.liquibase.LiquibaseMigrationRunner.performUpdate(LiquibaseMigrationRunner.java:190)
at io.micronaut.configuration.dbmigration.liquibase.LiquibaseMigrationRunner.migrate(LiquibaseMigrationRunner.java:147)
... 13 common frames omitted
Ok. DELETE FROM DATABASECHANGELOGLOCK
fixed it, strange, I don't remember it failing any start or migration. First time I started the service it didnt work.