68

I've worked through some of the Sinatra and Rails samples, but I'm having a hard time figuring out which features belong to which technology.

What specifically do I gain by using Sinatra/Rails? Is it just ActionPack/ActionView? Correct me if I'm wrong, but I COULD just use Webrick/Mongrel and serve up my .erb files right? And I could use ActiveRecord technology in those files and still access post variables, session state and querystring variables right?

So, what I'm asking you guys is, if I start with the PHP-like scenario above; Webrick + ERB + ActiveRecord, what do I gain by using Sinatra? And what do I further gain by using Rails?

LoveMeSomeCode
  • 3,888
  • 8
  • 34
  • 48

3 Answers3

64

For Sinatra, it's really almost like a wrapper around Rack. So you first need to ask what the point of Rack is. Rack is basically a specification for how a framework should return a result, it can use what's returned with any web server that Rack supports. So it's really a compatibility layer that allows you to choose your framework/server combination at will, without worrying about whether they'll work together. If your framework is Rack-compliant, you should be able to deploy on practically any server via Rack.

Now, the thing is Rack is very low level. Frameworks such as Sinatra give you things like nice routing, helpers, before/after filters, and a lot more. You just need to look to the docs to see what you can get. Rails is much more featureful, and in many ways "magical". That is, you might write a single line in Rails that ends up doing quite a lot, which for some is a good thing, and for some too magical. I personally prefer Sinatra for this reason, at least before getting a decent understanding of Rails internals.

Sergio Tulentsev
  • 226,338
  • 43
  • 373
  • 367
ehsanul
  • 7,737
  • 7
  • 33
  • 43
  • 1
    Thanks for the info. Here's a follow up question: If I didn't have Rails or Sinatra, how would I go about just using Webrick to serve up some ERB files? I assume it's possible to just use ruby commands to start the webrick on a certain port and point it at a certain directory? – LoveMeSomeCode Oct 22 '10 at 13:43
  • 3
    I just Googled for "webrick", 3rd result: http://microjet.ath.cx/webrickguide/html/ - and also this: http://segment7.net/projects/ruby/WEBrick/servlets.html – ehsanul Oct 23 '10 at 22:37
  • 1
    I don't see why you want to bother with all that though honestly, seems pretty pointless, and Webrick isn't exactly the best server. You can just use Sinatra's URL routing as an interface to ERB if that's all you really want. You can ignore all the other features, or use them later if you wish. Did you see the hello world for Sinatra? Super simple (and lines of code wouldn't change if you wanted it to reference an ERB file instead of just the string): http://http://www.sinatrarb.com/ – ehsanul Oct 23 '10 at 22:46
  • thanks for the info. I think I'm going with Sinatra for this project. And thanks for the links! – LoveMeSomeCode Oct 25 '10 at 04:06
5

The gain by Rails is ActionView/ActionPack. But you can just replace by Mongrel/Erb. It's something different.

It's all herlper you have in your view like name_route or error management in your form. It's all resources management and all plugin like InheritedResources. The advantage of Rails.

There are some tool like the Padrino environment to help you to have all of this helper. But It's really speeder after all plugin activate ? I don't think so.

With Rails 3, Rails is a complete Rack application with a lot of RackMiddleware. You can just drop off some middleware to increase your response.

shingara
  • 46,608
  • 11
  • 99
  • 105
3

This question is still relevant until today. And with rails' features are increasing over the time, I want to add a new answer.

There are so many gems right now, so what you can achieve in Rails, most likely you can achieve it too in Sinatra. If we want to compare between Rails and Sinatra (or any other frameworks), we just need to compare the performance and the ease of use.

One of Rails doctrine is convention over configuration. When you create a project in Rails, automatically you get many gems included in your Gemfile. Not only gems, when you look at config directory, you'll see many things included. This doctrine is the reason why the magic can happen in the first place. Once you break the convention, you have to modify -or even create- your configuration.

When we want to have more flexibility but still not reinvent the wheel, we can use framework like Sinatra, where only not so many features is enabled when we first create the project. Even so, I've created mini rails from Sinatra: I just adopting rails' way, with libs/gems that I really need. Because I need to develop my own configuration, the development time was longer than using rails.

If you see this web frameworks benchmark, you'll see that Rails is so slow while other ruby framework, like Sinatra, can be found much higher than Rails.

So, when the best to use Rails?

  • You need fast development time. Just follow the convention;
  • The future features of your apps are still unknown.

When the best to use Sinatra?

  • You don't need fast development time;
  • Sinatra can be fast if you only work in mini project;
  • You know that you won't add many features in the future.

What do you gain from Rails? Development speed.

What do you gain from Sinatra? Flexibility.

KSD Putra
  • 487
  • 2
  • 7