Swagger`无法自动加载常量`
Swagger `Unable to autoload constant`
Swagger 文档构建失败,出现错误:
LoadError: Unable to autoload constant ThingsController, expected /path/to/my/app/controllers/api/things_controller.rb to define it
奇怪的是,class 在那里定义,应用程序运行正常:只有 swagger 失败。
things_controller.rb
包含
class Api::ThingsController < ActionController::Base
swagger_controller :things, "Things"
swagger_api :index do
summary "Returns list of things"
end
end
知道为什么 Swagger 无法在定义它的文件中找到正常工作的 class 吗?
根据 rails 中的约定(这是由自动加载器强制执行的),文件路径应与命名空间相匹配
此外,您可能在尝试加载 things_controller class 时启动了自动加载器(我的猜测是它发生在 Act things_controller 中)。它在加载路径中查找 things_controller.rb 文件,在 app/controller/ 中找到它,然后加载该文件以便它可以找到 ThingsController class.
应该在app/controller/things_controller.rb.
class ThingsController < ActionController::Base
swagger_controller :things, "Things"
swagger_api :index do
summary "Returns list of things"
end
end
参考这个 link (https://coderwall.com/p/bjk3pa/documenting-rails-based-rest-api-using-swagger-ui)
这得出了一个非常奇怪的结论:有两个 ThingsController
,一个在 API 命名空间中,一个在 Api::ThingsController
中,一个在基本命名空间 ThingsController
中。基本命名空间中的那个已被删除,但仍被 routes.rb
引用,这是代码库中的一个错误。
报告的错误是它无法在 /path/to/my/app/controllers/api/things_controller.rb
中找到 Api::ThingsController
,而是 它无法在 ThingsController
中找到/path/to/my/app/controllers/things_controller.rb
.
我的结论是懒加载器中Rails报错存在bug。它报告错误的错误。 如果您收到无意义的消息,请检查是否存在名称冲突。
我认为这与 Swagger 无关,但是由它触发的,因为(我猜)它在源代码树中搜寻 Swagger 注释。
Swagger 文档构建失败,出现错误:
LoadError: Unable to autoload constant ThingsController, expected /path/to/my/app/controllers/api/things_controller.rb to define it
奇怪的是,class 在那里定义,应用程序运行正常:只有 swagger 失败。
things_controller.rb
包含
class Api::ThingsController < ActionController::Base
swagger_controller :things, "Things"
swagger_api :index do
summary "Returns list of things"
end
end
知道为什么 Swagger 无法在定义它的文件中找到正常工作的 class 吗?
根据 rails 中的约定(这是由自动加载器强制执行的),文件路径应与命名空间相匹配
此外,您可能在尝试加载 things_controller class 时启动了自动加载器(我的猜测是它发生在 Act things_controller 中)。它在加载路径中查找 things_controller.rb 文件,在 app/controller/ 中找到它,然后加载该文件以便它可以找到 ThingsController class.
应该在app/controller/things_controller.rb.
class ThingsController < ActionController::Base
swagger_controller :things, "Things"
swagger_api :index do
summary "Returns list of things"
end
end
参考这个 link (https://coderwall.com/p/bjk3pa/documenting-rails-based-rest-api-using-swagger-ui)
这得出了一个非常奇怪的结论:有两个 ThingsController
,一个在 API 命名空间中,一个在 Api::ThingsController
中,一个在基本命名空间 ThingsController
中。基本命名空间中的那个已被删除,但仍被 routes.rb
引用,这是代码库中的一个错误。
报告的错误是它无法在 /path/to/my/app/controllers/api/things_controller.rb
中找到 Api::ThingsController
,而是 它无法在 ThingsController
中找到/path/to/my/app/controllers/things_controller.rb
.
我的结论是懒加载器中Rails报错存在bug。它报告错误的错误。 如果您收到无意义的消息,请检查是否存在名称冲突。
我认为这与 Swagger 无关,但是由它触发的,因为(我猜)它在源代码树中搜寻 Swagger 注释。