3

我正在重写(是的,我知道!)一个主要由 API 驱动的 Rails 应用程序,使用 Intridea 的 Grape 和grape-swagger gem 来启用 Swagger UI 进行文档。

所以我有一个简单的 hello world 应用程序正在运行。似乎可以从 swagger 测试中发现,尽管它目前正在给出 JSON 解析错误(我将在接下来研究)。我想将 swagger UI 放入 Rails 应用程序中,指向 /swagger_doc.json,以便在构建时确保文档在旁边正确构建。

我将 Swagger UI 放在 rails 应用程序的什么位置?公共目录?

4

3 回答 3

6

好的,所以我发现了一些混乱,当我之前尝试将其全部放在公共目录中时,它们什么也没显示。

myapp/public/swagger-ui-1.1.1/files

1)我不知道这是否应该有所作为,但我在 config.ru 中加载 rails 应用程序和葡萄应用程序的顺序似乎对路由的处理方式产生了影响......我需要了解更多这是如何工作的。但是现在路线中安装的葡萄应用程序可以满足我的期望。结果,将 swagger-ui 解压缩到公共然后就可以了

http://appurl/swagger-ui-1.1.1/ 

给了我招摇的用户界面。如果有更多细节,我会添加更多细节。

编辑:因为会有像我这样需要帮助的其他用户,我将在下面概述。这很容易:

在资产管道中创建 /swagger 子目录 - 我是在供应商下完成的。将 lib 文件从 swagger UI 复制到这些子目录。创建一个带有索引操作的基本 docs_controller(可以为空)。创建一个 views/docs 目录并将 swagger-ui index.html 复制到其中。将样式表和 javascript 调用更改为 index.html 中的资产标签。为文档添加资源路由。将调用 window.swaggerUI 的 javascript 函数中的 discoveryURL 更改为“http://my.root.url/swagger_doc.json”(最好来自 ENV 变量)。

而已。它现在可以正常工作了。当 Swagger 在 docs 子域上运行时,我遇到的一个问题是,在 api 子域下使用我的 Grape API 是 CORS。通过添加以下内容可以轻松地在 Grape 中修复:

before do
  header "Access-Control-Allow-Origin", "http://#{ENV["BASE_URL"]}"
  header "Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT"
  header "Access-Control-Max-Age", "1728000"
end

到你的葡萄 api.rb。希望一切都对某人有所帮助。

于 2012-10-26T23:16:38.273 回答
1

如果你看看这个宝石会很容易,https://github.com/BrandyMint/grape-swagger-rails

于 2014-08-22T08:26:36.583 回答
0

我们必须将所有 Swagger UI 放在 rails 应用程序的公共目录中。并将其与以下版本一起使用。

gem '葡萄', '~> 0.7.0' gem 'grape-swagger', '~> 0.7.2'

因为 'grape-swagger' gem 不支持最新版本。

于 2014-12-31T08:47:17.160 回答