2012-10-26 43 views
3

我正在重寫(是的,我知道!)一個主要由API驅動的Rails應用程序,使用Intridea的Grape和葡萄大搖大擺的Gem來啓用Swagger UI以獲得文檔。我在哪裏可以將Swagger-UI與Grape放在Rails應用程序中?

所以我有一個簡單的Hello World應用程序運行。似乎從swagger測試中發現,儘管它現在給出了JSON解析錯誤(接下來我會看看)。我想把swagger用戶界面放到Rails應用程序中,指向/swagger_doc.json,所以我可以確保文檔正確地正確構建。

我在哪裏將Swagger UI放在rails應用程序中?公共目錄?

回答

6

好的,所以我發現了幾個snafus,當我試圖將它全部放入公共目錄之前,沒有任何顯示。

myapp/public/swagger-ui-1.1.1/files 

1)我不知道這是否應該有所作爲,但在我裝Rails應用程序,並在config.ru葡萄應用程序的順序似乎有所作爲路由是如何處理的。 ..我需要更多地瞭解這是如何工作的。但是現在,路線內的葡萄應用程序完成了我所期望的。因此,隨着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。通過添加類似的東西容易地固定在葡萄:

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.希望所有人都能幫助別人。

+1

謝謝,幫了我很多! – 23tux

0

我們必須把所有的UI揚鞭在Rails應用程序的公共目錄。 並與以下版本一起使用。

寶石 '葡萄', '〜> 0.7.0' 寶石 '葡萄招搖', '〜> 0.7.2'

因爲 '葡萄招搖' 寶石不支持最新版本的。

相關問題