Ruby has a very clean syntax that makes code easier to both read and write than more traditional Object Oriented languages, such as Java. For beginning programmers, this means the focus is on the meaning of the program, where it should be, rather than trying to figure out the meaning of obscure characters.
presidents = ["Ford", "Carter", "Reagan", "Bush1", "Clinton", "Bush2"]
for ss in 0...presidents.length
print ss, ": ", presidents[presidents.length - ss - 1], "\n";
end
The sheer scale and massive number of developers using Rails has produced a large number of guides, tutorials, plugins, documentation, videos and anything that can help new and old Rails developers.
There are many third-party plugins (Ruby gems) available for Rails development. The larger ones and those that have a lot of downloads and users are very well documented and easy to use.
The large number of documentation, tutorials, videos and guides which help new developers who are just starting with Rails make it seem very easy to create a small and simple application by relying on code generation and components that come out of the box with Rails.
So much behavior is implemented with dynamic behind-the-scenes changes to existing classes that obscure bugs are way too common. Conflicting interactions between multiple plugins that both try to change the same objects are a particularly pernicious example.
Rails' simplicity is deceptive. It's learning curve is really low at first, and the huge number of tutorials and guides out there for starting with Rails make it even easier. But it starts getting harder and harder as apps become more complicated. If good code conventions and OO design are not followed, then the codebase will be all over the place and it becomes impossible to maintain it.
Rails is supported on every major Cloud hosting service nowadays. There are also countless tutorials that help developers deploy their Rails apps if there are any problems on the way.
Sinatra has taken an approach of having only the most useful components needed to build applications out of the box. It has simple routes along with a Domain Specific Language over a Rack layer.
Because it's rather small and minimalistic, scaling up is not very easy with Sinatra. You need a great deal of knowledge on libraries and modules that may be useful for your particular use-case. As your application grows larger it may be hard to keep things clean and minimalistic, losing a lot of the advantages that Sinatra has.
Rack is great at separating the different stages of a request, allowing developers to easily follow separation of concerns, a key goal for any well designed software.
Rack is a very bare-bones middleware useful for easily creating REST APIs without too many bells and whistles. As such, it may prove useless to build a complex web application that relies on the backend for most of its operations with Rack.