2014-06-20 15 views
14

Android uygulaması için bir API yapmak istiyorum. Arama yaparken, {grape}'u buldum. Ben this tutorial takip ediyorum, ama bir sorun Raylar sunucuyu başlatmak zorunda: Neden bu hatayı alıyorumNeden Rails ve üzüm ile "Sabit otomatik olarak yüklenemiyor" alıyorum?

#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 

:

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

Benim dizini:

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

ve dosyaları ? Ruby 1.9.3p484 ve Rails-4.0.2 kullanıyorum.

+0

Tüm * API'lerini * .rb dosyalarınızdaki 'Api'ye yeniden adlandırmaya çalışabilir misiniz? – huocp

+0

Denedim ama aynı hata: – HatsuMora

cevap

18

deneyin ya

  • dışında API modülü API sınıfları Hareketli app/api dan app/api/api veya

  • için API kodunun dosya taşıma (yani tüm module API satırları silme ve onların end tekabül ifadeleri). Grape's documentation itibaren

:

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 .

Böylece sizin API::Root sınıf için doğru konum aslında app/api/api/root.rb olurdu.

Bu değişiklikle kodunuz çalışmaya başlıyor ve Rails 4.0.2'de benim için iyi çalışıyor.

+0

Çok teşekkürler, şimdi öğreticiye devam edebilirim, ilk opctionı deneyeceğim. – HatsuMora

+0

ipi/api/api/api altındaki tüm yerlerde 'api/api/silme' yerine hala 'başlatılmamış sabit' hatalar alıp, – Boboyum

+0

aynı sorunları aldığım gibi ikinci seçenek önerisini takip ettim ... Sabit Varsayılanlar yüklenemedi , beklenen –

İlgili konular