2014-06-20 14 views
14

Voglio fare un'API per un'applicazione Android. Durante la ricerca, ho trovato {grape}. Sto seguendo this tutorial, ma ho un problema lanciando il server Rails:Perché ricevo "Impossibile eseguire il caricamento automatico costante" con Rails e uva?

=> Booting WEBrick 
=> Rails 4.0.2 application starting in development on http://0.0.0.0:80 
=> Run `rails server -h` for more startup options 
=> Ctrl-C to shutdown server 
Exiting 
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-4.0.2/lib/act 
ive_support/dependencies.rb:464:in `load_missing_constant': Unable to autoload c 
onstant Usuarios, expected C:/Sites/appCerca/app/api/v1/usuarios.rb to define it 
(LoadError) 

mio elenco:

app 
..api 
....api.rb 
....v1 
......root.rb 
......usuarios.rb 

ei file:

#application.rb 
module AppCerca 
    class Application < Rails::Application 
     config.paths.add "app/api", glob: "**/*.rb" 
     config.autoload_paths += Dir["#{Rails.root}/app/api/*"] 
    end 
end 

#routes.rb 
AppCerca::Application.routes.draw do 
    mount API::Root => '/' 
    [...] 

#app/api/root.rb 
module API 
    class Root < Grape::API 
     prefix 'api' 
     mount API::V1::Root 
    end 
end 

# app/api/v1/root.rb 
module API 
    module V1 
     class Root < Grape::API 
      mount API::V1::Usuarios 
     end 
    end 
end 

# app/api/v1/usuarios.rb 
module API 
    module V1 
     class Usuarios < Grape::API 
      version 'v1' 
      format :json 

      resource :usuarios do 
       desc "Return list of authors" 
       get do 
        Usuario.all 
       end 
      end 
     end 
    end 
end 

Perché mi appare questo errore ? Sto usando Ruby 1.9.3p484 e Rails-4.0.2.

+0

Provare a rinominare tutti gli 'API' in' Api' nei file * .rb? – huocp

+0

Ho provato ma lo stesso errore: – HatsuMora

risposta

18

Provate sia

  • Spostare i file del codice API da app/api a app/api/api, o

  • Spostare i classi API di fuori il modulo API (vale a dire l'eliminazione di tutte le module API linee e la loro corrispondente end dichiarazioni).

Da Grape's documentation:

Place API files into app/api . Rails expects a subdirectory that matches the name of the Ruby module and a file name that matches the name of the class. In our example, the file name location and directory for Twitter::API should be app/api/twitter/api.rb .

Così la posizione corretta per la classe API::Root sarebbe in realtà app/api/api/root.rb.

Con questa modifica il codice inizia e funziona perfettamente con Rails 4.0.2.

+0

Grazie mille, ora posso continuare il tutorial, provo la prima opzione. – HatsuMora

+0

ho seguito la tua raccomandazione della seconda opzione in quanto non volevo api/api/eliminando l''API modulo' in tutti i posti sotto/api ma ottenendo sempre errori 'costante non inizializzata' – Boboyum

+0

stessi problemi ... Impossibile eseguire il caricamento automatico dei valori predefiniti , previsto –

Problemi correlati