Rails lädt die Klassen neu und 'wurde aus dem Modulbaum entfernt, ist aber noch aktiv!' ArgumentError

9

Ich habe eine benutzerdefinierte Instrumentierung in meiner Rails-Anwendung geschrieben. Ich aktiviere es in config/initializers/instrumentation.rb datei wie folgt:

%Vor%

Aber das führt mich zu Fehlern A copy of FooBar::ControllerRuntime has been removed from the module tree but is still active! . Ich finde heraus, dass ich es auf zwei Arten lösen kann:

  • Hinzufügen eines Pfades, wo 'FooBar :: ControllerRuntime is defined to config.autoload_one_paths'
  • Definieren von :to_prepare Callback in ActionController::Railtie

Die zweite Lösung sieht so aus:

%Vor%

Diese lange Einführung führt zu der Frage: welcher Weg ist besser? Mit dem ersten deaktiviere ich das Umladen von Klassen, die im selben Pfad liegen wie mein FooBar::ControllerRuntime . Mit der Sekunde fühle ich nicht, dass es gut ist, mit ActionController::Railtie zu versauen. Richtig wissen ActionController::Railtie hat to_prepare nicht definiert, aber was ist passiert, wenn es in der nächsten Version sein wird?

    
Sebastian 12.05.2014, 08:46
quelle

1 Antwort

4

Der erste Ansatz sieht sauberer aus -

  

Pfad hinzufügen, wo 'FooBar :: ControllerRuntime definiert ist   toconfig.autoload_one_pfade '

Gründe -

1) Wenn Sie wirklich einige Affen-Patches in einer Datei wie lib / extensions.rb machen möchten, können Sie sie manuell anfordern:

in config / initializers / require.rb:

erfordert "# {Rails.root} / lib / extensions"

2) Befolgt die richtigen Namenskonventionen, da Sie die Klasse und das Modul auflisten müssen.

Ich würde zwar nicht vorschlagen, die Anwendung automatisch zu laden, aber wenn es die letzte Option ist, können Sie es sicherlich ausprobieren.

Gut lesen Sie hier auf der gleichen - Ссылка

    
Caffeine Coder 26.09.2016, 07:18
quelle