Ich habe viele Controller, die identisch benannt sind in different namespaces:Rake Environment Superklasse Mismatch dann einschließlich lib Ordner?
Marketplace::ProductsController < ApplicationController
Office::Marketplace::ProductsController < Office::BaseController
API::V2::Marketplace::ProductsController < BaseController
, die mit rails s
und rails c
, beide Unit-Tests und Gurken Tests fein arbeiten.
Als ich jedoch getting started with ActiveJob tutorial folgte und versuchte, den Befehl QUEUE=* rake environment resque:work
auszuführen, wird der folgende Fehler ausgegeben.
TypeError: superclass mismatch for class ProductsController
Es scheint, als ob resque nicht glücklich über diese beiden identisch benannten Controller ist - Namespace sie auch sein mögen - aus verschiedenen Klassen erben. Gibt es irgendeinen Grund, warum rake environment
sich über jede andere Rake-Aufgabe beschwert und Rails damit in Ordnung ist.
Update 1:
ich gefunden habe, dass für API::V2::Marketplace::ProductsController
wie unten definiert ist:
module API
module V2
class Marketplace::ProductsController < BaseController
end
end
end
Sobald ich es unten verändert, scheint der Fehler behoben worden zu sein.
class API::V2::Marketplace::ProductsController < API::V2:BaseController
end
Inzwischen Marketplace::ShopsController
und API::V2::Marketplace::ShopsController
hat kein Problem, auch wenn diese, wie unten
module API
module V2
class Marketplace::ShopsController < BaseController
end
end
Der Fehler ist nun über einige rspec Dateien in meinem lib
Ordner definiert wurde. Ich habe einige Lib-Ordner hinzugefügt, die etwas mit der Codebasis verwandt, aber nicht wirklich verwendet werden. Anscheinend versucht es, diese Dateien zu laden und mir einen solchen Fehler zu geben, als der QUEUE=* rake environment resque:work
Befehl ausgegeben wurde.
Sobald ich diese Legacy-Dateien aus den Ordnern lib entfernt habe, bekomme ich keinen Fehler.
Enthält rake environment
alles von lib? Ich finde das ungläubig, da alle anderen Rake-Aufgaben, die ich ausgeführt habe, nichts dergleichen tun.
Update 2:
Während genaueres Hinsehen mit --trace
. Ich könnte meine puts
Nachricht so sehen.
** Invoke environment (first_time)
** Execute environment
** Invoke resque:work (first_time)
** Invoke resque:preload (first_time)
** Invoke resque:setup (first_time)
** Execute resque:setup
** Execute resque:preload
** My puts message.**
** Invoke resque:setup
** Execute resque:work
resque:preload
scheint wie der Täter. Kann ich das irgendwie gierig ausschließen?
Ich habe ein weiteres Update hinzugefügt, das "resque: preload" als Schuldigen gefunden hat. Irgendeine Möglichkeit, es davon abzuhalten, gierig alles zu laden? – mmhan