Learning to Fly... with Fly.io

Deploying a Rails app

I’ve historically always reached for Heroku to deploy little apps and side projects when I wanted to push them out for others to see and use. When Heroku ended their “free” plan, several new platforms seemed to emerge or old alternatives gained renewed interest, such as render, hatchbox, fly, digital ocean and many others. In this post I’m going to focus on Fly.io which I’ve used a couple of times and been very impressed with.

What is Fly?

Fly is a platform that lets you very simply deploy full stack apps and databases to their globally distributed network, with the minimum of fuss. If you have a Rails app running on your local machine, you can get it deployed and available to users all over the world in literally minutes!


Install Fly on MacOS

First things first, we need to install the Fly app locally. I use Homebrew to manage all package installs on my Mac, and I recommend you do too if you don’t already.

brew install flyctl

If this is your first time using Fly, then you’re going to need an account there too which can be set up for free as follows. Note you will need to provide a credit card, but you won’t incur any charges for a simple app.

fly auth signup

If you already had an account, you’ll need to sign in

fly auth login

Deploy your app

Now you’re ready to deploy and launch your Rails app! In my case the app is named example - obviously use your app name here in place of ‘example’ - so cd into the root directory of the app, and start the Fly launch wizard!

cd example
fly launch

When you run the launch command the first time, you’ll run through a few questions in the terminal. Firstly you need to choose a name, or accept the default, then select a region to deploy to. In my case I chose London.

Creating app in ~/example
Scanning source code
Detected a Rails app
? Choose an app name (leave blank to generate one): example
automatically selected personal organization: Your Name
Some regions require a paid plan (bom, fra, maa).
See https://fly.io/plans to set up a plan.

? Choose a region for deployment:  [Use arrows to move, type to filter]
  Guadalajara, Mexico (gdl)
  Rio de Janeiro, Brazil (gig)
  Sao Paulo, Brazil (gru)
  Hong Kong, Hong Kong (hkg)
  Ashburn, Virginia (US) (iad)
  Johannesburg, South Africa (jnb)
  Los Angeles, California (US) (lax)
> London, United Kingdom (lhr)
  Madrid, Spain (mad)
  Miami, Florida (US) (mia)
  Tokyo, Japan (nrt)
  Chicago, Illinois (US) (ord)
  Bucharest, Romania (otp)
  Phoenix, Arizona (US) (phx)
  Querétaro, Mexico (qro)

Then you’ll be asked if you want to provision a database (yes) and a redis instance (probably not yet) and you’ll see lots of output as a docker image is created and deployed.

After a few minutes you should see the process complete. You will also see a few files were generated fly.toml, Dockerfile, .dockerignore etc. These are generated once and once complete you’re ready to deploy!

fly deploy

This will take a couple of minutes and all being well you’ll be shown a URL where you can visit your app online!

As you work on your webapp, you just need to fly deploy to push the latest out live!

There are lots of further options, capabilities and features, all covered in the excellent Fly Documentation but I hope this quick intro has given you the basics and got you up and running!