我已经完成了一些Sinatra和Rails示例,但我很难确定哪些功能属于哪种技术。
使用Sinatra / Rails可以获得什么?它只是ActionPack / ActionView吗?如果我错了,请纠正我,但我可以使用Webrick / Mongrel并提供我的.erb文件吗?我可以在这些文件中使用ActiveRecord技术,仍然可以访问帖子变量,会话状态和查询字符串变量吗?
所以,我问你们的是,如果我从上面的类似PHP的场景开始; Webrick + ERB + ActiveRecord,使用Sinatra可以获得什么?通过使用Rails我还能获得什么?
答案 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?
您从Rails中学到什么?开发速度。
您从Sinatra获得了什么?灵活性。