Ich habe eine benutzerdefinierte Instrumentierung in meiner Rails-Anwendung geschrieben. Ich aktiviere es in config/initializers/instrumentation.rb
datei wie folgt:
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:
is defined to
config.autoload_one_paths' :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?
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 - Ссылка
Tags und Links ruby-on-rails instrumentation ruby-on-rails-4.1