The PaaS Hangover: Why I Deploy Rails with Hatchbox
Deploying a modern Ruby on Rails application usually forces you into one of two extremes. On one side lies the PaaS route (Heroku, Render, Fly.io). It offers simplicity: push your code, let their buildpacks figure out the rest, and go back to building features. But the convenience tax is brutal. You are locked into arbitrary memory limits, sleep cycles, and per-dyno billing that makes running three small side projects feel like leasing commercial real estate. On the other side is the DIY and containerized route (Kamal, Dokku, or raw VPS orchestration). You get cheap compute, but you also inherit the DevOps maintenance tax. You are suddenly managing Docker registries, debugging multi-stage Dockerfiles, troubleshooting proxy containers, and configuring Let’s Encrypt edge cases. For the vast majority of independent builders and lean software teams, neither extreme makes sense. That is why Hatchbox is my default deployment tool for Rails. The Power of "Bring Your Own Compute"Hatchbox is a control plane, not a hosting provider. You connect your own servers from Hetzner, DigitalOcean, Linode, or AWS via SSH, and Hatchbox handles provisioning, environment configuration, database setups, and zero-downtime deploys. This separation of concerns changes the economics completely. Take a look at some example costs here based on deployment solutions: Platform / Setup Architecture Est. Monthly Cost (3 Small Apps + DBs + Background Workers) Heroku Managed Dynos + Eco Dynos + Postgres Add-ons $70 – $150+ Render / Fly.io Managed Micro-VMs / Containers $45 – $90 Hatchbox + Hetzner/DO 1 Dedicated VPS (4GB RAM, 2 vCPU) + Hatchbox Plan $16 – $24 total With Hatchbox, you pay for raw server hardware once. If you have three low-traffic Rails applications, a handful of cron jobs, and background workers, you can pack them onto a single $6 to $12/month VPS without paying a per-application penalty. Rails-First Sensibility (No Container Friction)Most modern deployment tooling treats Rails as just another generic web service inside a Docker container. Hatchbox treats Rails as a first-class citizen because it was built specifically for it. • Boring, Understandable Infrastructure: Hatchbox provisions native Ubuntu environments with systemd services, Puma, and a fast Caddy reverse proxy. Deploys run using the proven symlink release pattern. • Frictionless Debugging: When an issue crops up, you don't need to jump through Docker namespaces or container exec commands. You SSH into your server, cd into your current release, and run bin/rails console or inspect standard Linux logs. • Modern Rails Defaults: Hatchbox natively supports Rails credentials (RAILS_MASTER_KEY), runs database migrations cleanly on release, handles asset precompilation out of the box, and works out-of-the-box with modern SQLite setups and the Solid Trifecta (Solid Queue, Solid Cache, Solid Cable). The Push-to-Deploy Experience Without the Lock-InHatchbox connects directly to GitHub. Once configured, your workflow looks identical to a high-end platform: 1. Merge your pull request to main. 2. A GitHub webhook triggers the build on your server. 3. Hatchbox runs your bundle, compiles your assets, runs pending migrations, and performs a zero-downtime phased Puma restart. 4. Caddy automatically provisions and renews your SSL certificates. You get the frictionless "push to deploy" developer experience without handing over control of your database or paying an exponential markup on RAM. The Verdict For solo developers, bootstrappers, and small teams, developer cycles are too valuable to spend debugging container orchestration, and server budgets are too lean to hand over to PaaS markup. Hatchbox occupies the exact middle ground: it automates the tedious parts of server administration while keeping your stack standard, fast, and remarkably affordable.