我在哪里将Swagger-UI放入带有Grape的Rails应用程序中?

时间:2012-10-26 22:48:56

标签: ruby-on-rails json api swagger grape-api

我正在重写(是的,我知道!)一个主要由API驱动的Rails应用程序,使用Grape by Intridea和葡萄招摇宝石来启用Swagger UI进行文档化。

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

我在哪里将Swagger UI放入rails应用程序?公共目录?

3 个答案:

答案 0 :(得分:6)

好吧所以当我尝试将它们全部放在以前的公共目录中时,我发现了一些没有显示任何问题的snafus。

myapp/public/swagger-ui-1.1.1/files

1)我不知道这是否应该有所不同,但我在config.ru中加载rails应用程序和葡萄应用程序的顺序似乎对路由的处理方式有所不同......我需要了解更多如何工作。但现在在路线内安装的葡萄应用程序可以满足我的期望。结果,随心所欲的u拉开拉,然后去了

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

给了我一个昂首阔步的UI。如果还有更多细节,我会为此添加更多细节。

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

在资产管道中创建/ swagger子目录 - 我是在供应商下完成的。将lib文件从swagger UI复制到这些子目录。使用索引操作创建基本docs_controller(可以为空)。创建一个views / docs目录并将swagger-ui index.html复制到它。在index.html中将样式表和javascript调用更改为asset-tags。添加文档的资源路径。将调用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

到您的Grape api.rb.希望所有人都能帮到别人。

答案 1 :(得分:1)

如果你看一下这个宝石https://github.com/BrandyMint/grape-swagger-rails

,那就太容易了

答案 2 :(得分:0)

我们必须将所有Swagger UI放在rails app的公共目录中。 并使用以下版本。

gem' grape','〜> 0.7.0' gem' grape-swagger','〜> 0.7.2'

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