2013-05-02 21 views
3

我有兩個API,我試圖在我的Rails應用程序中安裝 - 一個名爲'v1',另一個名爲'twilio'。每個API都由多個文件組成,所以我希望每個文件都有自己的文件夾。在我的app/api目錄中,我有兩個文件夾 - 'v1'和'twilio' - 以及一個名爲'api.rb'的文件,我試圖用它來安裝這兩個api。它的內容是:在Rails中安裝多個Grape API

module API 
    class V1 < Grape::API 
    prefix "api" 
    format :json 
    mount API::Root => '/v1' 
    end 

    class Twilio < Grape::API 
    prefix "twilio" 
    format :xml 
    mount API::Twilio_API => '/twilio' 
    end 
end 

在「V1」目錄中,我有一個叫做「root.rb」文件開頭如下:

module API 
    class Root < Grape::API 
    version 'v1', :using => :header 
    ... 

,並在「twilio」目錄,我有一個名爲 'twilio_api.rb' 的文件,開始表現爲:

module API 
    class Twilio_API < Grape::API 
    version 'v1', :using => :header 
    ... 

我的路線文件有:

mount API::V1 => "/" 
mount API::Twilio => "/" 

當我開始我的Rails服務器,我得到的錯誤:

`load_missing_constant': Expected [My rails app]/app/api/v1/root.rb to define Root (LoadError) 

我不明白這一點,因爲root.rb肯定不會定義根類。任何幫助將非常感激。

回答

0

我認爲它期望你的類名是在目錄結構下的等價結構。這將使你:

class API::V1::Root End

或者東西在這些線路。

(從我的手機......)

+0

我試着改變我的掛載調用以遵循模式'mount :: API :: V1 :: Root',並用名稱'V1'和'TWILIO在父模塊內部包裝'Root'和'Twilio'類定義'分別爲了匹配目錄結構,但我仍然得到相同的錯誤。 – Andrew 2013-05-02 22:55:09

0

我有一個類似的錯誤,並要求在類的頂部的文件解決它。即

require 'root' 
require 'twilio' 

在api.rb

葡萄API,有說明自動加載的文件名,不知道這是否已經完成或將幫助您:

Place API files into app/api and modify application.rb. 

config.paths.add "app/api", glob: "**/*.rb" 
config.autoload_paths += Dir["#{Rails.root}/app/api/*"] 
6

葡萄您可以在另一箇中安裝多個API。這意味着您可以爲您的API提供一個「基礎」類,並將其他所有類加入其中。

文件結構:

app/ 
    api/ 
    v1/ 
     v1_api.rb 
    twilio/ 
     twilio_api.rb 
    api.rb 

應用程序/ API/api.rb:

require 'v1/v1_api' 
require 'twilio/twilio_api' 

module API 
    class Base < Grape::API 
    mount API::V1 
    mount API::Twilio 
    end 
end 

應用程序/ API/V1/v1_api.rb:

module API 
    class V1 < Grape::API 
    prefix "v1" 
    format :json 

    get :hello do 
     { text: 'Hello from V1' } 
    end 
    end 
end 

應用程序/ API/twilio/twilio.rb:

module API 
    class Twilio < Grape::API 
    prefix "twilio" 
    format :xml 

    get :hello do 
     { text: 'Hello from Twilio' } 
    end 
    end 
end 

配置/路由。rb:

mount API::Base => '/api' 

重新啓動你的rails服務器,你很好去。你也應該能夠輕鬆地從app/api/twilio和app/api/v1目錄自動加載文件,所以你不需要它們。

+0

謝謝!這正是我遇到的問題。 :) – 2015-10-18 21:39:20