2016-04-06 12 views
1

Swagger docs scheitern mit dem Fehler zu bauen,:Swagger `kann nicht automatisch zu laden constant`

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

Die seltsame Sache ist, die Klasse ist dort definiert, und die App funktioniert: nur Prahlerei versagt .

things_controller.rb enthält

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

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

Irgendwelche Ideen, warum Swagger nicht in der Lage sein würde, eine funktionierende Klasse in der Datei zu finden, wo sie definiert ist?

Antwort

0

Dies ist eine sehr seltsame Schlussfolgerung hatte: Es gibt zwei ThingsController s, ein in dem API-Namespace, Api::ThingsController und ein in der Basisnamespace ThingsController. Der Name im Basisnamespace wurde entfernt, wurde aber immer noch von routes.rb angesprochen, was ein Fehler in der Codebasis war.

Der Fehler gemeldet war, dass es nicht Api::ThingsController in /path/to/my/app/controllers/api/things_controller.rbfinden konnte, sondern es versagt ThingsController in /path/to/my/app/controllers/things_controller.rb zu finden.

Meine Schlussfolgerung ist, dass es einen Fehler in Rails Fehlerberichterstattung im Lazy Loader gibt. Es meldet den falschen Fehler. Wenn Sie eine unsinnige Nachricht erhalten, überprüfen Sie, ob kein Namenskonflikt vorliegt..

Ich denke, das hat nichts mit Swagger zu tun, wird aber dadurch ausgelöst, weil (ich denke) es den Quellbaum nach Swagger-Annotationen durchsucht.

0

Vereinbarungs in Schienen (und dies wird durch Autoloader erzwungen wird), sollten Namespaces Dateipfade

Zusätzlich

übereinstimmen, werden Sie wahrscheinlich Autoloader haben treten in beim Versuch, eine things_controller Klasse (meine Vermutung zu laden ist, dass es von innen heraus geschieht Handle sachen_controller). Es sucht nach einer sachen_controller.rb-Datei im Ladepfad, sucht sie in app/controller/und lädt diese Datei, so dass sie die ThingsController-Klasse finden kann.

sollte es in app/controller/things_controller.rb sein.

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

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

Siehe diesen Link (https://coderwall.com/p/bjk3pa/documenting-rails-based-rest-api-using-swagger-ui)

+0

Ich versuche Ihren Kommentar zu verstehen. Wenn Sie 'app/controller /' sagen, nehmen Sie an, Sie meinen 'app/controllers /'? Wenn ja, ist der Pfad der Datei ** korrekt, sicher? Die Fehlermeldung verweist auf die vorhandene Datei, die, wie gesagt, ** die Klasse enthält. – Joe

Verwandte Themen