2016-04-06 2 views
1

чванство документы не в состоянии построить, с ошибкой:Кураж `Не удается автозагрузку constant`

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 

Любые идеи, почему Кураж бы не в состоянии найти класс функционирующий в файле, где она определяется?

ответ

0

Это было очень странное заключение: есть два ThingsController s, один в пространстве имен API, Api::ThingsController и один в базовом пространстве имен ThingsController. Один в базовом пространстве имен был удален, но все еще упоминался routes.rb, что было ошибкой в ​​кодовой базе.

ошибка сообщается, что он не смог найти Api::ThingsController в /path/to/my/app/controllers/api/things_controller.rb, но вместо того, чтобы это было не в состоянии найти ThingsController в /path/to/my/app/controllers/things_controller.rb.

Я пришел к выводу, что ошибка в Rails error report в ленивом загрузчике. Он сообщает о неправильной ошибке. Если вы получили бессмысленное сообщение, убедитесь, что нет столкновения имени.

Я думаю, что это не связано с Swagger, но вызвано им, потому что (я думаю) это пауки дерева источников, ищущих аннотации Swagger.

0

По соглашению в рельсах (и это навязывается заряжания), пути к файлам должны соответствовать пространство имен

Кроме того, вы, вероятно, автозагрузчик ногами в при попытке загрузить things_controller класс (я думаю, что это происходит изнутри Act things_controller). Он ищет файл thing_controller.rb в пути загрузки, находит его в приложении/контроллере/и, таким образом, загружает этот файл, чтобы он мог найти класс ThingsController.

должно быть в приложении/контроллере/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)

+0

Я пытаюсь понять ваш комментарий. Когда вы говорите 'app/controller /', я предполагаю, что вы имеете в виду 'app/controllers /'? Если да, то путь файла ** корректен, верно? Сообщение об ошибке указывает на существующий файл, который, как я сказал **, ** содержит класс. – Joe

Смежные вопросы