For what it's worth, I was dissatisfied with most Ruby frameworks (aka. Rails & Sinatra), so when it came time to build up a massive project on a Ruby backend, I rolled my own minimal (<1kloc) Ruby framework.
https://github.com/kballenegger/kenji
I, too, find Rails to be a bloated mess. Here's what I wanted out of my ideal framework:
- The "framework" has one single task: providing a DSL for routing requests, and dealing with the HTTP nitty-gritty.
- The default would be build for JSON APIs. The return value of routes gets serialized to JSON.
- Everything is explicit. No magic.
- You can organize you code in simple, maintainable units (files), grouped by functionality. (This is achieved through a tree routing structure, where controllers can pass / forward certain routes to other controllers.
- Code can be namespaced, can be tested easily, can be scripted easily. Functionality does not depend on naming conventions.