Sinatra与Rails的比较

68
我已经研究了一些Sinatra和Rails的示例,但我很难弄清楚哪些功能属于哪种技术。
具体来说,使用Sinatra/Rails会带来什么好处?只是ActionPack/ActionView吗?如果我没记错的话,我可以使用Webrick/Mongrel并直接提供我的.erb文件。而我可以在这些文件中使用ActiveRecord技术,仍然可以访问post变量、session状态和查询字符串变量,对吗?
所以,我想问你们的是,如果我从上面提到的类似PHP的场景开始; Webrick + ERB + ActiveRecord,那么我通过使用Sinatra会获得什么?通过使用Rails我又能获得什么?
3个回答

64

Sinatra实际上几乎就像是Rack的封装。因此,您首先需要问的是Rack的目的是什么。Rack基本上是一个规范,用于指定框架应该返回什么结果,它可以使用任何Rack支持的Web服务器返回内容。因此,它真正提供了一种兼容性层,使您能够自由选择框架/服务器组合,而不必担心它们是否能协同工作。如果您的框架符合Rack规范,则应该能够通过Rack在几乎任何服务器上部署。

现在的问题在于,Rack非常低级。像Sinatra这样的框架为您提供诸如良好的路由、帮助程序、前/后过滤器等等。您只需要查看文档即可了解可以得到什么。Rails更加功能丰富,在许多方面也更加“神奇”。也就是说,您可能会在Rails中写一行代码,最终会执行相当多的操作,对于某些人来说这是好事,对于某些人来说它太神奇了。出于这个原因,我个人更喜欢Sinatra,至少在充分理解Rails内部工作原理之前。


1
谢谢提供信息。这里有一个后续问题:如果我没有Rails或Sinatra,我该如何使用Webrick来仅提供一些ERB文件?我猜想可以使用Ruby命令在特定端口上启动webrick并将其指向特定目录? - LoveMeSomeCode
3
我刚刚在谷歌上搜索了“webrick”,第三个结果是:http://microjet.ath.cx/webrickguide/html/ - 还有这个:http://segment7.net/projects/ruby/WEBrick/servlets.html。 - ehsanul
1
我不明白为什么你想要烦恼这些,老实说,这似乎相当无意义,而且Webrick并不是最好的服务器。如果你只是想要一个接口来引用ERB,那么你可以使用Sinatra的URL路由。你可以忽略所有其他功能,或者以后再使用它们。你看过Sinatra的hello world吗?非常简单(如果你想要引用一个ERB文件而不仅仅是字符串,代码行数也不会改变):http://http://www.sinatrarb.com/ - ehsanul
谢谢提供的信息。我想在这个项目中选择Sinatra。还有,感谢提供的链接! - LoveMeSomeCode

5
Rails的优势在于ActionView/ActionPack。但你可以用Mongrel/Erb来替换它,这是两种不同的选择。
在视图中,你有许多工具可以使用,例如name_route或者表单中的error management。还有资源管理和插件,如InheritedResources等。这些都是Rails的优势。
有一些工具,比如Padrino环境,可以帮助你使用所有这些工具。但是,在所有插件激活后,它真的更快吗?我不这么认为。
随着Rails 3的推出,Rails成为了一个完整的Rack应用程序,并且拥有大量的RackMiddleware。你只需要去掉一些中间件就可以提高响应速度。

3
这个问题直到今天仍然很重要。随着时间推移,Rails的功能不断增加,我想添加一个新答案。
现在有很多宝石,因此您可以在Rails中实现的大多数内容也可以在Sinatra中实现。如果我们想比较Rails和Sinatra(或任何其他框架),我们只需要比较性能和易用性。
其中Rails doctrine之一是约定优于配置。当您在Rails中创建项目时,自动会在您的Gemfile中包含许多宝石。不仅如此,当您查看config目录时,会看到许多其他内容。这个原则是魔法发生的原因。一旦打破了这个约定,您就必须修改甚至创建自己的配置。
当我们希望拥有更多的灵活性但仍不想重复造轮子时,我们可以使用像Sinatra这样的框架,在我们首次创建项目时只启用了不那么多的功能。即便如此,我已经从Sinatra创建了mini rails:我只采用了Rails的方式,并使用了我真正需要的库/宝石。由于我需要开发自己的配置,所以开发时间比使用rails更长。
如果你看过这个web frameworks benchmark,你会发现Rails非常慢,而其他Ruby框架(比如Sinatra)的排名要比Rails高得多。
那么,什么时候最好使用Rails呢?
- 如果你需要快速开发时间,请遵循惯例; - 你的应用未来的功能还不确定。
什么时候最好使用Sinatra呢?
- 如果你不需要快速开发时间; - 如果你只是在小型项目中工作,Sinatra可以很快; - 你知道你不会添加太多功能。
从Rails中你获得了什么?开发速度。
从Sinatra中你获得了什么?灵活性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接