Early access is open. Migration assistance is included with every plan.

Ruby on Rails hosting

Run Rails with Puma, Sidekiq or Solid Queue, managed PostgreSQL and Redis. Deploys precompile assets, run migrations in a release phase and switch traffic without downtime, much like the Heroku workflow.

Build and run

9live detects Ruby on Rails automatically. You can override any default in 9live.toml, or add a Dockerfile and we'll use that instead.
Detected by
rails in Gemfile
Build
bundle install && bundle exec rails assets:precompile
Start
bundle exec puma -C config/puma.rb
Dockerfile (optional)
FROM ruby:3.3-slim
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install --without development test
COPY . .
RUN SECRET_KEY_BASE=dummy bundle exec rails assets:precompile
EXPOSE 3000
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]

Recommendations

Settings that work well for Ruby on Rails on dedicated hardware.
  • Set the release command to bundle exec rails db:migrate, the equivalent of Heroku's release phase.
  • Run Sidekiq as a worker process against managed Redis. Solid Queue needs only PostgreSQL.
  • Match Puma workers to the vCPUs allocated to the web process.
  • Point Active Storage at any S3-compatible bucket.
PlanPricevCPUMemoryNVMeDatabasesBackups
Launch$149/mo816 GB160 GB1Daily, kept 7 days
Grow$249/mo1232 GB320 GB2Daily, kept 14 days
Scale$349/mo1648 GB500 GB3, plus a read replicaHourly and daily, kept 30 days
CustomOn requestAs requiredUp to a full serverAs requiredAs requiredAs required

Questions

How close is the workflow to Heroku?

Close. Git deploys, a release phase, process types, config variables, rollbacks and log tailing all work the same way. The main differences are dedicated hardware and a fixed monthly price.

Do we need a Dockerfile to deploy Rails?

No. 9live detects Rails and builds it with a maintained buildpack. If your repository has a Dockerfile, we use it instead.

How are environment variables managed?

Set them per environment in the dashboard or with the CLI. They are encrypted at rest and injected at runtime. Connection strings for managed databases are added automatically.

What happens when a deploy fails?

If the build fails, or the new release fails its health check, the current release keeps serving traffic. You get a notification with the build or health-check logs.

Talk to an engineer about your setup

Tell us what you run today and where it runs. We reply within one business day with a recommended plan and an estimate for the migration.