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无法在定义它的文件中找到正常运行的类?
答案 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注释。