Deploying Genie apps with Heroku Buildpacks
This tutorial shows how to host a Julia/Genie app using a Heroku Buildpack.
This guide assumes you have a Heroku account and are signed into the Heroku CLI. Information on how to setup the Heroku CLI is available here.
In order to try the deployment, you will need a sample application. Either pick one of yours or clone this sample one, as indicated next.
All Steps (in easy copy-paste format):
HEROKU_APP_NAME to something unique:
This must be unique among all Heroku projects, and is part of the url where your project is hosted (e.g. https://my-app-name.herokuapp.com/).
If the name is not unique, you will see this error at the
heroku create step.
Creating ⬢ my-app-name... ! ▸ Name my-app-name is already taken
Clone an example project
git clone https://github.com/milesfrain/GenieOnHeroku.git cd GenieOnHeroku
You may also point to your own project, but it must be a git repo.
Procfile in the root contains the launch command to load your app. The contents of the
Procfile for this project is this single line:
web: julia --project src/app.jl $PORT
You may edit the
Procfile to point to your own project's launch script. (for example
src/my_app_launch_file.jl instead of
src/app.jl), but be sure to take into account the dynamically changing
$PORT environment variable which is set by Heroku.
If you're deploying a standard Genie application built with
Genie.newapp, the launch script will be
bin/server. Genie will automatically pick the
$PORT number from the environment.
Create a Heroku project
heroku create $HEROKU_APP_NAME --buildpack https://github.com/Optomatica/heroku-buildpack-julia.git
This creates a project on the Heroku platform, which includes a separate git repository.
heroku repository is added to the list of tracked repositories and can be observed with
git remote -v.
heroku https://git.heroku.com/my-app-name.git (fetch) heroku https://git.heroku.com/my-app-name.git (push) origin https://github.com/milesfrain/GenieOnHeroku.git (fetch) origin https://github.com/milesfrain/GenieOnHeroku.git (push)
We are using a buildpack for Julia. This runs many of the common deployment operations required for Julia projects. It relies on the directory layout found in the example project, with
Manifest.toml in the root, and all Julia code in the
Deploy your app
git push heroku master
This pushes your current branch of your local repo to the
heroku remote repo's
Heroku will automatically execute the commands described in the Julia buildpack and Procfile of this latest push.
You must push to the heroku
master branch to trigger an automated deploy.
Open your app's webpage
heroku open -a $HEROKU_APP_NAME
This is a convenience command to open your app's webpage in your browser.
The webpage is:
For example: https://my-app-name.herokuapp.com/
View app logs
heroku logs -tail -a $HEROKU_APP_NAME
This is another convenience command to launch a log viewer that remains open to show the latest status of your app.
println statements from Julia will also appear here.
Exit this viewer with
Logs can also be viewed from the Heroku web dashboard. For example: https://dashboard.heroku.com/apps/my-app-name/logs
Deploy app updates changes
To deploy any changes made to your app, simply commit those changes locally, and re-push to heroku.
<make changes> git commit -am "my commit message" git push heroku master