16

我想为 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)

我的目录:

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

和文件:

#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

为什么我会收到此错误?我正在使用 Ruby 1.9.3p484 和 Rails-4.0.2。

4

1 回答 1

22

尝试任一

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

  • 将您的API 类移出模块API(即删除所有module API行及其相应的end语句)。

葡萄的文档

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

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

通过此更改,您的代码开始并在 Rails 4.0.2 上运行良好。

于 2014-06-21T21:02:52.647 回答