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 whoseHost 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
/up as a health endpoint. For an older app, add one.
Set the master key
AddRAILS_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
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.