我正在处理一个包含使用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', '*')]
答案 0 :(得分:13)
尝试将您的API代码文件从app/api
移至app/api/api
。
将API文件放入
app/api
。 Rails需要一个与Ruby模块名称匹配的子目录和一个与该类名称匹配的文件名。在我们的示例中,Twitter::API
的文件名位置和目录应为app/api/twitter/api.rb
。
因此,API::Root
类的正确位置实际上是app/api/api/root.rb
。