Skip to content

Deploy guide · Ruby on Rails

Ruby on RailsDeploy Ruby on Rails in minutes.

Connect the repository, Railpack builds it, the service gets a domain with TLS. Databases from templates, usage drawn per minute from a prepaid balance, everything on EU nodes.

A dockside crane lowers a glowing crate into a small skiff moored at a night pier
$ npm i -g skiffly && skiffly login
$ cd my-rails-app && skiffly init
$ skiffly deploy --template postgres
$ skiffly variables set 'DATABASE_URL=${{Postgres.DATABASE_URL}}' RAILS_ENV=production
$ skiffly up
01Build

What Railpack detects

Railpack inspects the repository and picks the build for Ruby on Rails; most projects need no configuration. A Dockerfile in the repository always wins.

  • Gemfile with rails
  • config.ru
  • .ruby-version
Builder
Railpack (default)
Start command
bundle exec rails db:prepare && bundle exec rails server -b 0.0.0.0 -p $PORT

Derived by Railpack; override it in Settings → Deploy → Start command.

02Port

Port and $PORT

Skiffly injects PORT into every service and routes the public domain to it. Set the port in the service settings when your app listens on a fixed one; the default is 3000 for Ruby on Rails, 8080 when nothing is set.

Listen on $PORT
bundle exec rails server -b 0.0.0.0 -p $PORT
PORT
3000
SKIFFLY_PUBLIC_DOMAIN
<service>.skiffly.cloud
Terminal

From a terminal

Install the CLI, link the directory, deploy. skiffly up builds the pushed HEAD of the current branch and streams the build logs; skiffly domain gives the service a *.skiffly.cloud address.

Config as code

Or describe it once

.skiffly/skiffly.ts declares the service, its databases and the references between them. skiffly config plan shows the diff, skiffly config apply makes it so. The API mirrors railway/iac.

Config as code
.skiffly/skiffly.ts
// .skiffly/skiffly.ts
import { defineSkiffly, generate, github, postgres, project, service } from "@skiffly/config";

export default defineSkiffly(() => {
  const db = postgres("db");

  const web = service("web", {
    source: github("acme/web"),
    start: "bundle exec rails db:prepare && bundle exec rails server -b 0.0.0.0 -p $PORT",
    port: 3000,
    healthcheck: "/",
    env: {
      DATABASE_URL: db.env.DATABASE_URL,
      RAILS_ENV: "production",
      SECRET_KEY_BASE: generate("hex64"),
    },
  });

  return project("web", { resources: [web, db] });
});
FAQ

Ruby on Rails on Skiffly: common questions

How do I set environment variables for Ruby on Rails?
In the service's Variables tab, with skiffly variables set KEY=value, or in .skiffly/skiffly.ts. Reference other services with ${{Postgres.DATABASE_URL}} and environment-wide values with ${{shared.NAME}}. Secrets are encrypted at rest.
Can I change the build or start command?
Yes. Settings → Source → Build command overrides Railpack's build step; Settings → Deploy → Start command replaces the start command. A monorepo sets a root directory so the build runs inside it.
How do I add Postgres or Redis?
Deploy the template into the same environment. It arrives with a volume, generated credentials and a connection URL you reference from the Ruby on Rails service. Connect from your laptop with skiffly connect postgres.
Do I get preview environments per pull request?
Turn on PR previews on the project: every pull request gets its own copy of the environment on its own domain, removed when the PR is merged or closed. Forks are ignored.
What does a small Ruby on Rails app cost?
A 512 MB / 0.25 vCPU service runs at about $7.75 a month, drawn per minute from your balance. Add Postgres with 512 MB / 0.25 vCPU and a 10 GB volume for about $9 more. The free tier runs one 512 MB app with App Sleeping plus one 512 MB database at no cost.
Can the Ruby on Rails service sleep when idle?
Turn on App Sleeping: after about 10 minutes without a request it scales to zero and wakes on the next one (2–10 s). CPU and memory are not billed while asleep; the volume is.
Dawn over open water: a skiff with a teal sail heads for the horizon along a dashed chart line drawn on the sea

Deploy your Ruby on Rails app today

Free tier without a card. Hobby from $5 with $5 of usage included.