为什么我用Rails和葡萄得到“无法自动加载”?

我想为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  '/' [...] #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。

试试

  • 将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上启动并正常工作。