Rails App Deployment SaaS Comparison
Practical comparison of Fly.io, Render, DigitalOcean, Fargate, Railway, Heroku
The biggest question when first deploying a Rails app is "where should I host it?". After Heroku removed its free tier, alternatives like Fly.io, Render, and Railway have rapidly gained popularity.
Comparison Criteria: "Where can a solo/small team deploy a Rails 8 + SQLite project fastest, cheapest, and most reliably?"
| Service | Min Cost | Docker | SQLite | Persistent Volume | Rails 8 Fit | Best For |
|---|---|---|---|---|---|---|
| Fly.io | ~$5/mo | Yes | Yes (volume) | Yes | High (official) | MVP โ Prod |
| Render | Free tier | Yes | Limited (no persistent disk free) | Paid only | Medium | MVP |
| DigitalOcean | $4-6/mo | Yes (manual) | Yes (local disk) | Yes (local SSD) | High (most freedom) | Production |
| Railway | Usage-based | Yes | Limited | Limited | Medium | Quick prototyping |
| Heroku | $7/mo+ | Yes | No (ephemeral FS) | No | Low (PostgreSQL forced) | Legacy |
โ ๏ธ Fly.io + SQLite + Solid Queue = "database is locked"
Running Rails 8 SQLite + Solid Queue on Fly.io causes frequent "SQLite3::BusyException: database is locked" errors โ rarely occurring on DigitalOcean with identical setup.
Why Fly.io is worse: (1) Fly.io volume I/O latency is higher than DO's local SSD โ locks held longer, (2) Solid Queue + web sharing same DB file, (3) WAL mode or busy_timeout may be insufficient.
Fix: Increase busy_timeout to 10000ms, separate DB files for queue/cache/cable. If issues persist, DigitalOcean + Kamal is more stable for SQLite.
Architecture Diagram
Key Points
Write Dockerfile (auto-generated in Rails 7.1+)
Configure environment variables (DATABASE_URL, SECRET_KEY_BASE, RAILS_MASTER_KEY)
Set up PostgreSQL/SQLite database
Asset precompile + image build
Deploy to PaaS (git push or Docker push)
Custom domain + SSL configuration
Monitoring + log verification