Rails Middleware neu laden, ohne den Server in der Entwicklung neu zu starten

8

Ich habe eine Rails 4-App mit Middleware, die sich unter lib / some / middleware.rb befindet, die derzeit durch einen Initializer wie folgt in den Stack eingefügt wird:

%Vor%

Wenn ich etwas ändere, muss ich den Server leider neu starten. Wie kann ich es bei jeder Anfrage im Entwicklungsmodus neu laden? Ich habe ähnliche Fragen zum erneuten Laden von lib-Code mit Autoloading- oder Wrapping-Code in einem to_prepare-Block gesehen, aber ich bin mir nicht sicher, wie dies in diesem Szenario angewendet werden könnte.

Danke, - FJM

Update # 1

Wenn ich versuche, die Middleware zu löschen und sie dann erneut in einen to_prepare-Block einzufügen, erhalte ich die Fehlermeldung "Kann eingefrorenes Array nicht ändern".

    
Frank Joseph Mattia 01.01.2014, 23:08
quelle

2 Antworten

9

Ich dachte, dass Rails irgendwann clever genug war, den Middleware-Code zur Laufzeit zu ersetzen, aber ich könnte mich irren.

Hier ist, was ich erfunden habe, um Ruby-Klassen-Verrückten zu umgehen und das Nachladen der Rails-Klasse zu nutzen.

Fügen Sie die Middleware zum Stack hinzu:

%Vor%

Nutzen Sie das automatische Neuladen, stellen Sie jedoch sicher, dass die Instanz von running rails und das bereits initialisierte Middleware-Objekt den tatsächlich ausgeführten Code "vergessen" lassen:

%Vor%

Änderungen in Logic sollten von den Schienen übernommen werden, die bei jeder Anforderung automatisch neu geladen werden.

Ich denke, dass dies tatsächlich ein nützliches Juwel werden könnte!

    
phoet 24.01.2014, 02:41
quelle
0

Können Sie nicht einfach Schrotflinte verwenden? Wenn ich Ihre Frage verstanden habe, möchten Sie sicherstellen, dass die Umgebung bei jeder Änderung Ihres Codes neu geladen wird. Das ist was Schrotflinte tun wird.

    
Daniel C 01.01.2014 23:40
quelle