Rails 3和Sinatra的比较

20

对于我的下一个Web应用程序,我正在考虑是使用Rails 3.x还是Sinatra。

我想使用服务器提供用户身份验证、应用程序触发的电子邮件、相当复杂的数据模型(在ActiveRecord后面)以及与Web客户端的JSON数据接口。客户端将使用静态HTML、静态CSS、Javascript / jQuery将JSON数据渲染到视图中。呈现视图的"策略"将由Javascript代码和一些JSON数据驱动。 我不打算使用任何动态视图技术,例如ERB,HAML或RJS。

对于选择Sinatra或Rails 3.x,哪个更好?

在做出决定之前,还有其他问题要问吗?

5个回答

26

你的数据模型相当复杂,因此我想你的应用程序将需要处理大量的业务规则和交互可能性。

Sinatra适用于处理轻量级软件架构。如果你选择Sinatra,你可能会遇到需要自己处理的设计和组织问题。Rails实现了MVC模式,并通过提供许多有用的机制来帮助你组织代码。

你仍然可以使用Sinatra构建“全栈”Web应用程序,但是如果提供的功能数量很多(或将增长),你就必须自己处理很多事情。我认为Rails在更大的架构中自然地更适合。

PS:ActiveRecord在Sinatra和Rails中都可用。


既然我在任何情况下都会使用ActiveRecord,那么这有什么区别呢?毕竟,ActiveRecord不是让你将业务规则放在模型层吗?Rails的完整MVC堆栈相对于Sinatra而言,在业务规则方面给你带来了什么不同呢? - Jay Godse
2
例如,通常需要在模型层中使用验证规则(AR不提供)。 但重点更为普遍:在Rails中,您将自己置于现有结构中。您遵循惯例和模式,以确保您的应用程序易于维护并且可以良好扩展。 Sinatra仅帮助您进行路由和分派。在大型应用程序中,您需要更多的内容:您需要关注点的分离和结构化模式。当然,您可以编写一个基于Sinatra的框架来确保这一点,但这需要时间,并且会有错误(就像每个程序一样)。 (您也可以使用Padrino) - Antoine

6

Sinatra是一个非常好的选择,我觉得它比Rails更好,主要原因在于以下一个方面。这与另一个用户所说的"遵循惯例和模式,确保您的应用程序易于维护并且能够良好地扩展。"有关。

几年前,我们在Rails中开发了一个相当大的应用程序。由于Rails核心(即37信号)不关心使新版本向后兼容,我们所有的开发人员都必须进行完全重写。每次更新时,代码都会出问题。

因此,在Rails中编码不能确保可维护性或可扩展性。恰恰相反。

事实上,Sinatra的可扩展性会更好,因为它更加轻量级,并且您无论如何都需要使用旅客进行部署。 Sinatra社区没有炒作,非常乐于助人。与Rails相比,没有自以为是的、大而化之的人物。这一点很重要,因为Rails的议程可能与您的不同,您可能很快就需要重新编写代码。 O'Reilly出版社出版了一本新书,介绍了Sinatra的示例和创意,我认为值得一看。


1

我有一个现有的Rails应用程序,需要为外部设备(iPhone和Android应用程序)提供JSON接口,任务大致相同。

强烈建议使用sinatra-activerecord,这样您就可以在sinatra应用程序中包含所有模型。这样,您就不必重写业务逻辑。

按以下方式在sinatra应用程序中加载现有模型:

set :database, URI.encode("#{db_settings['adapter']}://#{db_settings['username']}@#{db_settings['host']}/#{db_settings['database']}")
require './data/models/user.rb'

而db_settings是从database.yml(与rails格式相同)加载其设置,请使用yaml_db gem;)。这样,您的sinatra应用程序可以重复使用来自rails应用程序的所有模型甚至配置文件。


如果你要在Sinatra中加载现有的Rails模型,那么为什么不直接使用Rails呢?选择Sinatra有什么好处? - kakubei

1
为什么你会使用Rails?你需要模板生成器吗?
使用Sinatra或纯Rack编写应用程序与Rails同样容易,并且您可以获得超级速度。
Sinatra应用程序可以按任何方式组织,比Rails更加灵活,无论应用程序大小如何,都是最佳选择。
将所有内容转换为微服务并添加自定义中间件在Sinatra和Rack中感觉更加自然。
说它只适用于较小的应用程序或架构的人只是因为他们没有足够地使用过它,我不知道谁开始了这个神话。

0

在你决定之前,你可能想要浏览一下其他轻量级Ruby框架 - 这篇文章有点旧,但可能值得一读。


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