为什么在Rails中安装路由失败并显示“未初始化的常量API”?

时间:2014-07-18 20:17:48

标签: ruby-on-rails rails-routing grape

我正在处理一个包含使用API gem的grape的应用。

这是我的Root班级:

module API
  class Root < Grape::API
    rescue_from :all do |e|
      Rack::Response.new(
        [ "Error: #{e.message}" ],
        500,
        { "Content-type" => "text/error" }
      ).finish
    end

    prefix "api"
    version 'v1', using: :path
    format :json
    error_format :json

    mount ::API::ServiceRequests
  end
end

以下是我如何将其安装在路线中:

mount API::Root => '/'

我收到的错误是: routes.rb:45:in阻止&#39;:未初始化的常量API(NameError)`

这些文件的结构类似于app/api/root.rb,我在application.rb中有一些代码可以加载文件:

config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]

1 个答案:

答案 0 :(得分:13)

尝试将您的API代码文件从app/api移至app/api/api

来自Grape's documentation

  

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

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