【问题标题】:Rails 3 vs Sinatra [closed]Rails 3 vs Sinatra [关闭]
【发布时间】:2011-04-05 09:54:41
【问题描述】:

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

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

使用 Sinatra 或 Rails 3.x 会更好吗?

在做出决定之前我还应该问其他问题吗?

【问题讨论】:

    标签: ruby-on-rails json sinatra


    【解决方案1】:

    在决定之前,您可能需要查看other lightweight Ruby frameworks - 帖子有点旧,但可能值得一看。

    【讨论】:

      【解决方案2】:

      您的数据模型相当复杂,所以我想您的应用程序必须处理大量的业务规则和交互可能性。

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

      您仍然可以使用 Sinatra 构建“全栈”网络应用程序,但您必须自己做很多事情,特别是如果您将提供的功能量很大(或将增加)。我认为 Rails 自然更适合大型架构。

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

      【讨论】:

      • 鉴于我在任何一种情况下都会使用 ActiveRecord,为什么它会有所不同?毕竟ActiveRecord不是让你把业务规则放在模型层吗?对于 Sinatra 没有的业务规则,Rails 的完整 MVC 堆栈会为您提供什么?
      • 例如,您的模型层通常需要验证规则(AR 不提供)。但重点更笼统:在 Rails 中,您将自己置于现有结构中。您遵循惯例和模式,以确保您的应用程序易于维护并且可以很好地扩展。 Sinatra 仅帮助您进行路由和调度。在大型应用程序中,您需要的远不止这些:您需要分离关注点和结构化模式。当然,您可以在 Sinatra 上编写一个框架来确保这一点,但这需要时间并且会有错误(就像在每个程序中一样)。 (你也可以使用帕德里诺)
      【解决方案3】:

      我有同样的任务来做现有的 Rails 应用程序,现在需要一个用于外部设备(iPhone 和 Android 应用程序)的 json 接口。 强烈建议使用 sinatra-activerecord,这样您就可以将所有模型包含在您的 sinatra 应用程序中。这样您就不必重写业务逻辑。

      在您的 sinatra 应用中加载您现有的模型,如下所示: set :database, URI.encode("#{db_settings['adapter']}://#{db_settings['username']}@#{db_settings['host']}/#{db_settings['database']} ") 需要'./data/models/user.rb'

      db_settings 正在从 database.yml 加载它的设置(与 rails 格式相同),为此使用 yaml_db gem ;)。这样,您的 sinatra 应用程序可以重用所有模型,甚至是 rails 应用程序中的配置文件。

      【讨论】:

      • 如果您要在 Sinatra 中加载现有的 Rails 模型,何必费心呢?为什么不直接使用 Rails?与 Sinatra 合作您有什么收获?
      【解决方案4】:

      Sinatra 将是一个非常好的选择,我觉得它比 Rails 更好,主要是出于一个原因。 这与另一位用户所写的“您遵循确保您的应用易于维护和良好扩展的约定和模式有关。

      几年前,我们在 Rails 中开发了一个相当大的应用程序。我们所有的开发人员都必须完全重写,因为 rails 核心(读取 37 个信号)并不关心他们的新版本向后兼容。在每次更新时,代码都会中断。

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

      事实上,Sinatra 的可扩展性会更好,因为它更轻量级,而且无论如何您都必须使用乘客进行部署。 Sinatra 社区没有炒作,而且非常有帮助。没有 prima donnas,与 Rails 相同程度的自负。这确实很重要,因为 Rails 议程可能与您的不同,您可能很快就会重新编写代码。 O'Reilly 有一本关于 Sinatra 的新书我认为值得一看,因为它充满了关于可以做什么和如何做的例子和想法。

      【讨论】:

        【解决方案5】:

        为什么你会在任何事情上使用 Rails?你需要模板生成器吗?

        使用 Sinatra 或纯粹的 Rack 编写应用程序与在 Rails 中一样简单,而且您做任何事情都能获得超快的速度。

        Sinatra 应用程序可以按照您想要的任何方式组织,并且比 Rails 灵活得多,无论应用程序有多大,它都是最佳选择。

        使用 Sinatra 和 Rack 将一切都变成微服务并添加自定义中间件感觉更加自然。

        人们说它是用于较小的应用程序或架构的,但使用得还不够多,我不知道是谁开始了这个神话。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-28
          • 2010-11-21
          • 2011-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-16
          • 1970-01-01
          相关资源
          最近更新 更多