我正在学习 Rails,对 Sinatra 和 Merb 知之甚少。我想知道您会在哪些情况下使用 Merb/Sinatra。
感谢您的反馈意见!
Sinatra 是一个比 Rails 更小、更轻的框架。如果您想快速运行一些只发送几个 URL 并返回一些简单内容的东西,则使用它。看看Sinatra 主页;这就是启动和运行“Hello, World”所需的一切,而在 Rails 中,您需要生成整个项目结构、设置控制器和视图、设置路由等等(我没有花了一段时间写了一个 Rails 应用程序,所以我不知道“Hello, World”到底有多少步,但肯定比 Sinatra 多)。Sinatra 的依赖项也比 Rails 少得多,因此它更容易安装和运行。
我们正在使用 Sinatra 作为我们现在正在编写的一些 Web 客户端库的快速测试 Web 服务器。事实上,我们可以编写一个文件并将所有逻辑包含在该文件中,并且依赖项很少,这意味着与使用 Rails 应用程序相比,使用和运行我们的测试要容易得多。
Merb正在被合并到 Rails中,所以很快就不应该有任何理由使用其中一个。它最初被设计为比 Rails 更轻、更解耦;Rails 有更多内置假设,即您将使用 ActiveRecord。但是当他们合并两者时,他们以类似的方式将 Rails 解耦,所以如果你已经在学习 Rails,那么坚持下去并跟随它们的发展可能是值得的。
对于 Merb,我不能说太多,但 Sinatra 对于小型或轻量级解决方案非常有效。如果您不使用大量代码,或者不需要庞大的网站,您可以使用 Sinatra 编写一个非常有效的网站,速度可以达到 Rails 的两倍,也可以是 Rails 的两倍(我个人认为)。
Sinatra 也非常适合应用程序的零碎部分,例如统计数据包的前端。或类似ErrCount的东西,它只是一个非常简单的计数器。
因此,在使用 Sinatra 时,请考虑轻量、快速和高度简单的 Web 应用程序(尽管复杂性是您的选择)。
事情的发展方式,很快就会成为一个没有实际意义的问题。
如前所述,Merb 2.0 和 Rails 3.0 将是同一回事。新合并的 Merb 和 Rails 核心团队已经在努力实现这一目标。我不知道他们是否还计划在 5 月由 RailsConf 发布(可能是测试版),但今年肯定会发生。
例如,如果您不喜欢使用 ActiveRecord 以外的 ORM,那么您现在可以从 Merb 开始,并在 2.0 (Rails 3.0) 发布时进行更新。目前,Merb 被普遍接受为比 Rails 提供更好的框架来改变组件。
Sinatra 看起来像是一个出色的 Web 应用程序解决方案,它具有较低的界面复杂性和比正常的 Merb/Rails 更低的模型级代码。实现简单的 RESTful API 将是一个很好的用途。当涉及到任何数量的 HTML 时,我不太相信它的价值,在涉及到模板时更是如此。
同样,Rails(以及即将推出的 Merb)现在位于 Rack 之上,没有理由不将婴儿 Sinatra 应用程序包含到解决方案中:它们可以一起生活。有一篇博客文章讨论了这个概念