Sinatra vs. Rails

时间:2010-10-21 16:00:09

标签: ruby-on-rails ruby sinatra

我已经完成了一些Sinatra和Rails示例,但我很难确定哪些功能属于哪种技术。

使用Sinatra / Rails可以获得什么?它只是ActionPack / ActionView吗?如果我错了,请纠正我,但我可以使用Webrick / Mongrel并提供我的.erb文件吗?我可以在这些文件中使用ActiveRecord技术,仍然可以访问帖子变量,会话状态和查询字符串变量吗?

所以,我问你们的是,如果我从上面的类似PHP的场景开始; Webrick + ERB + ActiveRecord,使用Sinatra可以获得什么?通过使用Rails我还能获得什么?

3 个答案:

答案 0 :(得分:62)

对于Sinatra来说,它几乎就像是Rack的包装。所以你首先需要问一下Rack的意义。 Rack基本上是框架应该如何返回结果的规范,它可以使用Rack支持的任何Web服务器返回的内容。所以它实际上是一个兼容层,允许您随意选择框架/服务器组合,而不必担心它们是否可以一起工作。如果您的框架符合Rack标准,那么您应该能够通过Rack在几乎任何服务器上进行部署。

现在,Rack是非常低级的。像Sinatra这样的框架可以为您提供良好的路由,帮助,过滤器之前/之后等等。您只需要查看文档即可了解您可以获得的内容。 Rails功能更强大,在很多方面都是“神奇的”。也就是说,你可能会在Rails中写一行,最后会做很多事情,对某些人来说这是一件好事,对于一些人来说太神奇了。因为这个原因,我个人更喜欢Sinatra,至少在对Rails内部结构有了理解之前。

答案 1 :(得分:5)

Rails获得的是ActionView / ActionPack。但你可以用Mongrel / Erb代替。这是不同的东西。

在您的视图中,您拥有的所有herlper就像name_route或表单中的错误管理一样。它是所有资源管理和所有插件,如InheritedResources。 Rails的优势。

有一些像Padrino环境这样的工具可以帮助你拥有所有这些帮手。但是在所有插件激活后它真的开始了吗?我不这么认为。

使用Rails 3,Rails是一个包含大量RackMiddleware的完整Rack应用程序。您可以放弃一些中间件来增加响应。

答案 2 :(得分:1)

直到今天,这个问题仍然有意义。随着Rails功能的不断增加,我想添加一个新答案。

现在有如此多的宝石,因此您可以在Rails中实现,最有可能在Sinatra中实现。如果要在Rails和Sinatra(或任何其他框架)之间进行比较,我们只需要比较性能和易用性即可。

Rails doctrine之一是约定优于配置。在Rails中创建项目时,Gemfile中会自动包含许多宝石。不仅宝石,当您查看config目录时,还会看到很多东西。这种学说是魔术可以首先发生的原因。违反约定后,您必须修改-甚至创建-配置。

当我们想拥有更大的灵活性但又不想改变方向时,可以使用Sinatra这样的框架,当我们第一次创建项目时,只有很少的功能被启用。即便如此,我还是从Sinatra创建了迷你导轨:我只是采用Rails的方式,并使用了我真正需要的库/宝石。因为我需要开发自己的配置,所以开发时间比使用rails长。

如果您看到此web frameworks benchmark,您会发现Rails是如此之慢,而其他的ruby框架(例如Sinatra)却比Rails高得多。

那么,什么时候最好使用Rails?

  • 您需要快速的开发时间。只要遵守约定;
  • 您的应用程序的未来功能仍然未知。

什么时候最好使用Sinatra?

  • 您不需要快速的开发时间;
  • 如果您仅在小型项目中工作,Sinatra可能会很快;
  • 您知道将来不会添加很多功能。

您从Rails中学到什么?开发速度。

您从Sinatra获得了什么?灵活性。