Sinatra 与 Rails

Posted

技术标签:

【中文标题】Sinatra 与 Rails【英文标题】:Sinatra vs. Rails 【发布时间】:2011-04-28 17:09:02 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

现在,Rack 的级别非常低。诸如 Sinatra 之类的框架为您提供了不错的路由、帮助程序、过滤器之前/之后等等。您只需要查看文档以了解您能得到什么。 Rails 更有特色,在很多方面都“神奇”。也就是说,您可能会在 Rails 中编写一行代码,最终会做很多事情,这对某些人来说是件好事,而对某些人来说太神奇了。出于这个原因,我个人更喜欢 Sinatra,至少在充分了解 Rails 内部原理之前是这样。

【讨论】:

感谢您的信息。这是一个后续问题:如果我没有 Rails 或 Sinatra,我将如何使用 Webrick 来提供一些 ERB 文件?我认为可以只使用 ruby​​ 命令在某个端口上启动 webrick 并将其指向某个目录? 我刚刚在 Google 上搜索了“webrick”,第三个结果:microjet.ath.cx/webrickguide/html - 还有这个:segment7.net/projects/ruby/WEBrick/servlets.html 我不明白你为什么要为这一切而烦恼,尽管老实说,似乎毫无意义,而且 Webrick 并不是最好的服务器。如果你真的想要的话,你可以只使用 Sinatra 的 URL 路由作为 ERB 的接口。您可以忽略所有其他功能,或者如果您愿意,可以稍后使用它们。你看到 Sinatra 的 hello world 了吗?超级简单(如果您希望它引用 ERB 文件而不仅仅是字符串,代码行不会改变):http://www.sinatrarb.com 感谢您的信息。我想我会和 Sinatra 一起去这个项目。并感谢您的链接!【参考方案2】:

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

这是您视图中的所有帮助程序,例如 name_route 或表单中的错误管理。它是所有资源管理和所有插件,如 InheritedResources。 Rails 的优势。

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

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

【讨论】:

【参考方案3】:

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

现在有这么多的宝石,所以你可以在 Rails 中实现的,很可能你也可以在 Sinatra 中实现。如果我们想在 Rails 和 Sinatra(或任何其他框架)之间进行比较,我们只需要比较性能和易用性即可。

Rails doctrine 之一是约定优于配置。当您在 Rails 中创建项目时,您会自动在 Gemfile 中包含许多 gem。不仅是 gems,当您查看 config 目录时,您会看到包含许多内容。这个学说是魔法可以首先发生的原因。一旦你打破了约定,你就必须修改——甚至创建——你的配置。

当我们想拥有更大的灵活性但又不想重新发明***时,我们可以使用像 Sinatra 这样的框架,在我们第一次创建项目时启用的功能并不多。尽管如此,我还是从 Sinatra 创建了 mini rails:我只是采用 rails 的方式,以及我真正需要的 libs/gems。因为需要自己开发配置,所以开发时间比使用rails要长。

如果你看到这个web frameworks benchmark,你会发现 Rails 太慢了,而其他 ruby​​ 框架,比如 Sinatra,比 Rails 高得多。

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

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

什么时候最好使用 Sinatra?

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

您从 Rails 中获得了什么?开发速度。

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

【讨论】:

以上是关于Sinatra 与 Rails的主要内容,如果未能解决你的问题,请参考以下文章

将 Sinatra 与acts_as_audited 一起使用的任何示例?

ruby 最小的sinatra应用程序与美洲狮的配置。

Sinatra APP与树莓上的工头一起运行在家庭网络中无法访问

你会推荐啥与 Sinatra 等效的 python? [关闭]

使用 Sinatra 提供静态文件

在Sinatra中使用Rack :: CommonLogger