2014-09-10 2 views
5

Ich brauche Hilfe, um Grape :: API mit Rails 4 zu starten. I bekomme eine Unable to autoload constant Base, obwohl eine puts sagt mir, dass die Klasse geladen ist. Was mache ich falsch?Grape :: API - Konstante Konstante nicht automatisch laden, erwartete /app/api/v1/base.rb, um sie zu definieren (LoadError)

app/api/api.rb

class API < Grape::API 
    prefix 'api' 
    format :json 
    default_format :json 
    mount V1::Base # Everything loads perfectly until I add this line. 
end 

app/api/v1/base.rb

module V1 
    class Base < API 
    puts "=== DEBUG - in Base" 
    version 'v1', using: :path, vendor: 'orwapp', cascade: false 

    mount Users 

    end 
end 

$ rspec spec/api

12:58:29 - INFO - Run all 
12:58:29 - INFO - Running all specs 
=== DEBUG - in Base 
/dependencies.rb:481:in `load_missing_constant': 
Unable to autoload constant Base, 
expected /Users/martins/Work/myapp/app/api/v1/base.rb to define it (LoadError) 
     from /Users/martins/Work/myapp/app/api/api.rb:9:in `<class:API>' 
     from /Users/martins/Work/myapp/app/api/api.rb:3:in `<top (required)>' 

spec/api/users_spec.rb

describe 'GET /api/v1/users/:id', focus: true do 
    let(:user) { Fabricate :user } 

    it 'returns that specific user' do 
    get "/api/v1/users/#{ user.id }", {}, https_and_authorization 
    response.status.should eq 200 
    parse_response_for(:user)['email'].should eq user.email 
    end 
end 

Die Versionen Ich verwende

$ ack grape Gemfile.lock 
     remote: git://github.com/intridea/grape.git 
     grape (0.9.1) 
     grape-entity (0.4.4) 
     grape-swagger (0.8.0) 
      grape 
      grape-entity 

Antwort

1

Versuchen Base vererben Grape::API statt API mit:

module V1 
    class Base < Grape::API 
    ... 

Indem es erbt von API du erschaffst einen circul ar-Abhängigkeit: Der Interpreter kann die Definition von V1::Base erst kennen, wenn er die Definition von API kennt, aber dafür müsste er zuerst die Definition von V1::Base usw. kennen.

+1

Danke für den Vorschlag. Es machte jedoch keinen Unterschied. Ich habe keine Probleme mit zirkulären Abhängigkeiten. Der Fehler, den ich bekomme, ist ** Nicht in der Lage, konstante Base automatisch zu laden ** – martins

0

Wechseln zu mount ::V1::Base behoben.

Verwandte Themen