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

Ric*_*dan 3 api json ruby-on-rails swagger grape-api

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

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

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

Ric*_*dan 6

好的,所以当我尝试将它们全部放在以前的公共目录中时,我发现了一些没有任何结果的snafus.

myapp/public/swagger-ui-1.1.1/files
Run Code Online (Sandbox Code Playgroud)

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

http://appurl/swagger-ui-1.1.1/ 
Run Code Online (Sandbox Code Playgroud)

给了我一个昂首阔步的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
Run Code Online (Sandbox Code Playgroud)

到你的葡萄api.rb. 希望所有人都有所帮助.