【问题标题】:Resource Generators in SinatraSinatra 中的资源生成器
【发布时间】:2013-02-10 13:05:51
【问题描述】:

我在 Rails 中开发了几个应用程序,我需要开发一个 API。我收到了在 Sinatra 中构建它的建议,所以我开始研究它。

看起来很不错,但是在 Rails 中自动化的很多东西似乎在 Sinatra 中并不存在。具体来说,我似乎必须从头开始编写我的资源。例如。模型本身、迁移和 REST 路由。

我想知道是否有像 Rails 提供的那样的 Sinatra 生成器?或者如果我希望这些事情自动化,我应该简单地使用 Rails?

【问题讨论】:

  • Sinatra 是简陋的,到目前为止还没有生成器。但是您可以使用一个 gem,它可以让您在任何 ruby​​ 应用程序中使用大多数 rails 插件。不知道它叫什么,所以它只是一个评论。

标签: ruby-on-rails sinatra generator


【解决方案1】:

查看可用于处理 RESTful 路由的 sinatra-rest gem。为方便起见,在下面引用:


[sinatra-rest 是] 一组模板,用于将 RESTful 路由引入 Sinatra。您唯一要做的就是提供意见。自动适用于基于 ActiveRecord、DataMapper 或 Stone 的模型。

例如,如果您的模型的类名为 Person,您只需添加以下行:

rest Person

这会将以下 RESTful 路由添加到您的应用程序。 (注意Person/people/* 路由的复数形式。)

Verb    Route            Controller   View
GET     /people          index        /people/index.haml
GET     /people/new      new          /people/new.haml
POST    /people          create       → redirect to show
GET     /people/1        show         /people/show.haml
GET     /people/1/edit   edit         /people/edit.haml
PUT     /people/1        update       → redirect to show
DELETE  /people/1        destroy      → redirect to index

【讨论】:

    【解决方案2】:

    我个人不使用 Sinatra,但我从其他 Rails 开发人员那里得到的很多反馈是,他们最终会切换回 Rails。我确信在 Rails 上使用 Sinatra 有很好的理由,但如果您已经了解 Rails,并且没有速度或应用程序大小限制,我会坚持下去。

    Sinatra 的另一个替代方案是 Rails API 项目,它不包含 Rails 框架的任何与视图相关的部分。我过去使用过它并且喜欢它,但它比仅使用 Rails 更好吗?很难说。

    【讨论】:

    • 感谢您的回答! :) 你知道他们为什么最终切换回 Rails 吗?
    • 主要是因为他们不断添加越来越多的已经内置到 Rails 中的库和功能。
    【解决方案3】:

    如果你必须有 Sinatra,你应该查看Padrino

    Padrino 是一个基于 Sinatra 网络库的 ruby​​ 框架。 Sinatra 是一种 DSL,用于在 Ruby 中创建简单的 Web 应用程序。帕德里诺 旨在让编写更高级的 Web 代码变得有趣和容易 应用程序,同时仍然坚持使 Sinatra 的精神 太好了!

    或者正如 Beerlington 提到的,如果您对 Rails 感觉更自在,可以使用 Rails API。我们最近一直在使用它并取得了很好的成功。我们创建了一个带有 mongo 后端的简单 API。启动非常快:)

    【讨论】:

    • 太棒了。我将更详细地了解帕德里诺。我的目标是在 Knockout.js 中构建前端,这样如果我将服务器端切换为使用 Node.js - 它就可以正常工作。是否可以重新安排 Padrino 的结构,让我有一个“服务器”文件夹和“客户端”文件夹,并让服务器和客户端完全解耦?我发现在 Rails 项目中很难看到这种区别。谢谢!
    • @Karan 为什么不将它们构建为两个独立的 Rack 应用程序?然后它们可以存在于不同的文件夹中,但可以使用 userun 在同一个 Rack 中运行。
    【解决方案4】:

    或者如果我希望这些事情自动化,我应该简单地使用 Rails 吗?

    如果您习惯于使用 Ruby 的 Rails 是一个问题,那么也许。或者,您可以尝试使用 Sinatra 的 API 生成器:

    https://github.com/mattetti/Weasel-Diesel

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多