为什么我用Rails和葡萄得到"无法自动加载常量"?

Hat*_*ora 16 ruby ruby-on-rails ruby-grape

我想为Android应用做一个API.搜索时,我找到了{grape}.我正在学习本教程,但是在启动Rails服务器时遇到问题:

=> 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)
Run Code Online (Sandbox Code Playgroud)

我的目录:

app
..api
....api.rb
....v1
......root.rb
......usuarios.rb
Run Code Online (Sandbox Code Playgroud)

和文件:

#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
Run Code Online (Sandbox Code Playgroud)

为什么我收到此错误?我使用的是Ruby 1.9.3p484和Rails-4.0.2.

小智 22

试试

  • 将API代码的文件移动app/apiapp/api/api,或

  • 移动你的API类之外API模块(即删除所有module API线路及其相应的end语句).

来自Grape的文档:

将API文件放入app/api.Rails需要一个与Ruby模块名称匹配的子目录和一个与该类名称匹配的文件名.在我们的示例中,文件名的位置和目录Twitter::API应该是app/api/twitter/api.rb.

因此,您API::Root班级的正确位置实际上是app/api/api/root.rb.

通过此更改,您的代码将在Rails 4.0.2上启动并正常工作.