How to Deploy a Rocket Application to Heroku
Rocket is a web application framework for the Rust programming language. Heroku is a platform-as-a-service provider that makes hosting web applications easy and, at the (low-traffic) hobby level, free. Deployment is as easy as pushing to a special git remote repository.
I recently deployed my first Rocket application to Heroku. Here’s how.
Since I hadn’t used Heroku in a long while, I first needed to install the
Command Line Interface (CLI) and log in.
sudo apt-get install heroku
If you aren’t using Linux and apt, see Heroku’s instructions for installing the Heroku CLI. If you don’t already have an account, you’ll need to register on their web site first.
From the root directory of my already written application, which is the root of its git repo,
I created the Heroku application, which I named
using this Rust buildpack.
heroku create todo-backend-rocket-rust \
That command automatically added a git remote called
Next I added two new files, the Procfile and a RustConfig.
By default, the Rust buildpack will use the latest stable Rust,
but Rocket requires nightly Rust.
VERSION=nightly in RustConfig to override the buildpack’s default.
The Procfile tells Heroku how to run your application.
I added one unconventional thing to my Procfile to get Rocket to run on
the Heroku-designated port. Rocket will look for a
ROCKET_PORT environment variable
to override its default or
Since (AFAIK) the Heroku port is neither configurable nor predictable nor consistent,
I couldn’t configure it in
Rocket.toml or rely on Rocket’s default,
but I didn’t want to have to change the code to look for a different environment variable,
if I could avoid it.
I tried assigning
ROCKET_PORT=$PORT in the Procfile, and it worked.
web: ROCKET_PORT=$PORT target/release/todo-backend-rocket-rust
Since the Heroku application name I chose was available,
I knew the application would be available at
https://todo-backend-rocket-rust.herokuapp.com/ once I deployed it,
and my application needs to be configured with its public base-URL,
so I committed the necessary config
base_url is not standard Rocket configuration;
it’s something custom that my application uses.)
Then I set the
ROCKET_ENV heroku configuration variable for my application
to tell Rocket to load the right configuration from
Heroku configuration values are exposed to applications as environment variables.
heroku config:set ROCKET_ENV=production
Then I was ready to deploy…
git push heroku master