Deploying to Heroku

This sub-generator allows to deploy automatically your JHipster application to the Heroku cloud.

Limitations

This sub-generator has a few caveats:

  • You can only use it with a Postgresql database, as this is what Heroku provides by default
  • If your application is killed by Heroku when your Liquibase changelog is being applied, your database will be marked as "locked" by Liquibase. You will need to manually clean the lock table (see below)

Running the sub-generator

Before running the sub-generator, you need to install the Heroku toolbelt, and have a Heroku account created.

Be sure that you got logged on Heroku following the documentation, in section getting started:

$ heroku login
Enter your Heroku credentials.
Email: YOUR_EMAIL
Password (typing will be hidden): YOUR_PASSWORD
Authentication successful.

To deploy your application to Heroku, type:

yo jhipster:heroku

This should package your application in "production" mode, create an Heroku application (with a Postgresql database), upload your code, and start the application.

Please be aware that your application must start under 60 seconds, or it will be killed. Depending on the platform load, starting under 60 seconds is of course not guaranteed!

Updating your deployed application

Preparing a new deployment

When your application is already deployed, you can prepare a new deployment by typing:

mvn package -Pprod -DskipTests

Or when using gradle:

./gradlew -Pprod bootRepackage -x test

Pushing to production

Note: This assumes you have run the generator on the machine you are executing this command from. If you have not, you will need to first run heroku plugins:install https://github.com/heroku/heroku-deploy.

To push to production, type:

heroku deploy:jar --jar target/*.war

Or when using gradle:

heroku deploy:jar --jar build/libs/*war

Troubleshooting

If your app is hanging at boot-time with the message "Configuring Liquibase", then make sure you have a local Postgres client installed and run the following command:

$ heroku pg:psql -c "update databasechangeloglock set locked=false;"

Heroku has a default boot-timeout limit of 60 seconds. If your Liquibase configuration takes longer than this, Heroku will kill the process, which leaves the database in a locked state. If the problem is persistent, try contacting Heroku Support to request a longer boot limit for your app.

More information