为什么我用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/api
到app/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上启动并正常工作。