Swagger`无法自动加载常量`

时间:2016-04-06 11:55:50

标签: ruby-on-rails swagger

Swagger文档无法构建,错误:

LoadError: Unable to autoload constant ThingsController, expected /path/to/my/app/controllers/api/things_controller.rb to define it

奇怪的是,那里定义了 类,并且应用正在运行:只有招摇失败。

things_controller.rb包含

class Api::ThingsController < ActionController::Base
  swagger_controller :things, "Things"

  swagger_api :index do
    summary "Returns list of things"
  end
end

为什么Swagger无法在定义它的文件中找到正常运行的类?

2 个答案:

答案 0 :(得分:0)

按惯例在rails中(这由自动加载器强制执行),文件路径应与命名空间匹配

此外,在尝试加载thing_controller类时,您可能已经启动了自动加载器(我的猜测是它发生在Act thing_controller中)。它在加载路径中查找things_controller.rb文件,在app / controller /中找到它,然后加载该文件,以便它可以找到ThingsController类。

它应该在app / controller / things_controller.rb中。

class ThingsController < ActionController::Base
  swagger_controller :things, "Things"

  swagger_api :index do
    summary "Returns list of things"
  end
end

请参阅此链接(https://coderwall.com/p/bjk3pa/documenting-rails-based-rest-api-using-swagger-ui

答案 1 :(得分:0)

这有一个非常奇怪的结论:有两个ThingsController,一个在API命名空间中,Api::ThingsController,另一个在基本命名空间ThingsController中。基本命名空间中的那个被删除但仍被routes.rb引用,这是代码库中的一个错误。

报告的错误是,它无法在Api::ThingsController 中找到/path/to/my/app/controllers/api/things_controller.rb,而是在{{1}中未能找到ThingsController }}

我的结论是延迟加载程序中的Rails错误报告存在错误。它报告错误的错误。 如果您收到无意义的消息,请检查是否存在名称冲突

我认为这与Swagger无关,但是由于它(因为我猜)它会触发源树寻找Swagger注释。