Skip to main content
Rails runs on slipway as a web service on the Ruby runtime, with a managed Postgres alongside it.

Prerequisites

A Rails 7 or 8 app in a GitHub or GitLab repository.

Configure the app

Rails blocks requests whose Host header is not permitted, which shows up as a 403 on a deploy that otherwise looks healthy.
config/environments/production.rb
assume_ssl matters because TLS terminates at slipway’s edge, so Rails sees plain HTTP from the proxy and would otherwise redirect in a loop.

Add slipway.yaml

slipway.yaml
Rails 7.1 and later ship /up as a health endpoint. For an older app, add one.

Set the master key

Add RAILS_MASTER_KEY under the project’s Settings → Variables & secrets before the first deploy, using the value from config/master.key. Never commit that file.

Add Sidekiq

slipway.yaml
maxShutdownDelaySeconds gives Sidekiq time to finish an in-flight job before the container is killed. Set the Redis maxmemory policy to noeviction for a queue, so entries are never silently dropped. See Redis.

Active Storage

Use object storage rather than local disk, which is lost on every deploy:
slipway.yaml
Set force_path_style: true in your Active Storage config.

Next steps

Scaling

Run several Puma processes behind the load balancer.

Troubleshooting

What to check when a deploy goes wrong.