Deploying Genie apps with Heroku Buildpacks
This tutorial shows how to host a Julia/Genie app using a Heroku Buildpack.
Prerequisites
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.
The application
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):
Customize your HEROKU_APP_NAME
to something unique:
HEROKU_APP_NAME=my-app-name
Clone a sample app if needed:
git clone https://github.com/milesfrain/GenieOnHeroku.git
Go into the app's folder:
cd GenieOnHeroku
And create a Heroku app:
heroku create $HEROKU_APP_NAME --buildpack https://github.com/Optomatica/heroku-buildpack-julia.git
Push the newly created app to Heroku:
git push heroku master
Now you can open the app in the browser:
heroku open -a $HEROKU_APP_NAME
If you need to check the logs:
heroku logs -tail -a $HEROKU_APP_NAME
Steps with more detailed descriptions
Select an app name
HEROKU_APP_NAME=my-app-name
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.
A 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.
This 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 Project.toml
, Manifest.toml
in the root, and all Julia code in the src
directory.
Deploy your app
git push heroku master
This pushes your current branch of your local repo to the heroku
remote repo's master
branch.
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: https://$HEROKU_APP_NAME.herokuapp.com/
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.
The println
statements from Julia will also appear here.
Exit this viewer with Ctrl-C
.
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