2014-06-20 14 views
14

Chcę zrobić API dla aplikacji na Androida. Podczas wyszukiwania znalazłem {grape}. Obserwuję this tutorial, ale mam problem z uruchomieniem serwera szyn:Dlaczego otrzymuję komunikat "Nie można automatycznie włączyć stałej" z Rails i winogron?

=> 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) 

moim katalogu:

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

oraz pliki:

#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 

Dlaczego otrzymuję ten błąd ? Używam Ruby 1.9.3p484 i Rails-4.0.2.

+0

Czy możesz spróbować zmienić nazwę wszystkich 'API' na' Api' w swoich plikach * .rb? – huocp

+0

Próbowałem, ale ten sam błąd: – HatsuMora

Odpowiedz

18

Spróbuj albo

  • Przenoszenie plików kodzie API z app/api do app/api/api lub

  • Przenoszenie klas API poza moduł API (tj usuwając wszystkie module API linie i odpowiadających im end sprawozdania).

Od 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 .

zatem prawidłowa lokalizacja dla twojej klasy API::Root byłby rzeczywiście app/api/api/root.rb.

Przy tej zmianie Twój kod zaczyna się i działa dobrze dla mnie w Rails 4.0.2.

+0

Bardzo dziękuję, teraz mogę kontynuować samouczek, próbuję pierwszej operacji. – HatsuMora

+0

Postępowałem zgodnie z twoją rekomendacją drugiej opcji, ponieważ nie chciałem api/api /, usuwając "moduł API" we wszystkich miejscach w/api, ale wciąż otrzymuję błędy "niezainicjowanej stałej" – Boboyum

+0

same problemy ... Nie można automatycznie włączyć stałą Domyślne , spodziewany –

Powiązane problemy