Sinatra-App bei jeder Anfrage unter Windows neu laden

8

Ich habe Rack::Reload gemäß diesem Thread

eingerichtet %Vor%

Wird mit dem Thin via thin start -R config.ru ausgeführt, lädt jedoch nur neu hinzugefügte Routen neu. Wenn ich die bereits bestehende Route ändere, wird immer noch der alte Code ausgeführt.

Wenn ich eine neue Route hinzufüge, wird sie neu geladen, so dass sie zugänglich ist, aber nichts anderes neu geladen wird.

Zum Beispiel, wenn ich Routen zu

ändere %Vor%

Than / würde immer noch foo bedienen, obwohl es sich geändert hat, aber /foo würde baz korrekt neu laden und bereitstellen.

Ist das normal, oder fehlt mir etwas? Ich würde erwarten, dass die gesamte Quelldatei neu geladen wird. Der einzige Weg, den ich mir gerade vorstellen kann, ist der Neustart des gesamten Webservers, wenn sich das Dateisystem ändert.

Ich verwende Windows Vista x64, daher kann ich shotgun wegen fork() nicht verwenden.

    
Jakub Arnold 17.12.2009, 12:08
quelle

4 Antworten

21

Ihr könnt sinatra-reloader ausprobieren, von dem bekannt ist, dass es unter Windows gut funktioniert (auch schneller als Schrotflinte) .

    
Konstantin Haase 26.03.2010 00:05
quelle
5

Das funktioniert:

%Vor%

Es kommt darauf an, wo Sie die require-Anweisung haben. Aber ich finde die folgende Lösung eleganter und robuster:

%Vor%     
Jan Berkel 07.04.2010 00:01
quelle
0

Funktioniert Shotgun nicht unter Windows?

Aus der README:

%Vor%

Dies ist eine automatische Neuladeversion des Rackup-Befehls, der mit ausgeliefert wird Gestell. Es kann als eine Alternative zu der bereitgestellten komplexen Nachladelogik verwendet werden durch Web-Frameworks oder in Umgebungen, die das Neuladen von Anwendungen nicht unterstützen.

Der Shotgun-Befehl startet einen der von Rack unterstützten Server (z. B. mongrel, webrick) und lauscht auf Anfragen, lädt aber keinen Teil des eigentlichen Anwendung. Jedes Mal, wenn eine Anfrage empfangen wird, lädt sie die Anwendung in Der untergeordnete Prozess verarbeitet die Anforderung und beendet den untergeordneten Prozess. Das Ergebnis ist ein sauberes, anwendungsweites Neuladen aller Quelldateien und Vorlagen auf jede Anfrage.

    
Mike H 17.12.2009 20:52
quelle
0

Sie können auch einen Trinidad JRuby Rack-Container verwenden, der auf Tomcat basiert. Nach meiner Erfahrung ändert sich das Neuladen standardmäßig, ohne dass die Quelldateien geändert werden müssen. Verdammt schnell auch. Natürlich ist es nicht gut, wenn Sie native Bibliotheken verwenden, aber wenn Sie Windows einsetzen, sind Sie wahrscheinlich daran gewöhnt, einen reinen Rubin-Ansatz zu wählen.

Die Syntax ist genauso einfach wie die Thin-Methode:

%Vor%

Es gibt kein Java-spezifisches Yak-Shaving (d. h. das Erstellen von web.xml oder WARen Sie Ihre Ruby-Anwendung), und das Gem ist einfach zu installieren.

    
Richard Conroy 10.08.2010 09:22
quelle

Tags und Links