Deploy guide · Ruby on Rails
Deploy 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.
$ 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 upWhat 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.
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.
bundle exec rails server -b 0.0.0.0 -p $PORT- PORT
- 3000
- SKIFFLY_PUBLIC_DOMAIN
- <service>.skiffly.cloud
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.
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.
// .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] });
});Works with the templates you need
Deploy a database next to the Ruby on Rails service and reference its variables: ${{Postgres.DATABASE_URL}} is wired on the private network, no public port.
Ruby on Rails on Skiffly: common questions
How do I set environment variables for Ruby on Rails?
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?
How do I add Postgres or Redis?
skiffly connect postgres.Do I get preview environments per pull request?
What does a small Ruby on Rails app cost?
Can the Ruby on Rails service sleep when idle?
Deploy your Ruby on Rails app today
Free tier without a card. Hobby from $5 with $5 of usage included.