ich benutze
# my_app.rb
load 'index.rb'
und starten Sie den Server so
ruby my_app.rb
Es werden jedoch keine Änderungen neu geladen, die ich auf der Indexseite vorgenommen habe.
Habe ich hier etwas verpasst?
Siehe die Sinatra FAQ ,
"Wie kann ich meine Sinatra-App bei Änderungen neu laden?"
Zunächst einmal ist das erneute Laden von Code in Ruby schwierig und es ist technisch unmöglich, eine Lösung zu finden, die für jedes Szenario funktioniert.
Aus diesem Grund empfehlen wir Ihnen, das Laden außerhalb des Prozesses durchzuführen.
Zuerst müssen Sie rerun installieren, falls Sie dies noch nicht getan haben:
$ gem install rerun
Wenn Sie jetzt Ihre Sinatra-App wie folgt starten:
$ ruby app.rb
Alles, was Sie zum Nachladen tun müssen, ist stattdessen Folgendes:
$ rerun 'ruby app.rb'
Wenn Sie beispielsweise Rackup verwenden, gehen Sie stattdessen wie folgt vor:
$ rerun 'Rackup'
Du hast die Idee.
Wenn Sie weiterhin ein In-Process-Reload durchführen möchten, lesen Sie
Sinatra::Reloader
.
rerun
. Sie sind nicht auf Standardoptionen beschränkt, zrerun 'rackup'
. Es ist möglich, jeden Server an jedem Port auszuführen. Hier ist ein Beispiel, wie man Puma auf Portnummer 5678rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
Hinweis : Es werden nur Sinatra-Handler (und möglicherweise einige Konfigurationsbefehle für Sinatra-Server) neu geladen, jedoch keine benutzerdefinierten Dateien, die Sie manuell neu laden müssen.
UPD nach 9 Jahren: scheint , wie es bereits möglich ist , andere Dateien zu laden verwenden
also_reload
,dont_reload
undafter_reload
- https://github.com/sinatra/sinatra/pull/1150quelle
require "./my-file"
ohne Erfolgrequire
die Datei nicht neu, wenn sie bereits benötigt wurde. Sieload
stattdessen.server.rb
, damit sie meine externe Datei neu lädt. Meine externe Datei wird nicht alleine überprüft, daher muss ich siesever.rb
jedes Mal neu speichern, wenn ich Änderungen an meiner externen Datei vornehme. Schrotflinte scheint in dieser Hinsicht besser zu funktionieren, aber sie scheint auch die Datenbanksitzungen neu zu laden.configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Sie können den
rerun
Edelstein verwenden.ODER wenn Sie Rackup verwenden
quelle
gem install sinatra-reloader
Möglicherweise möchten Sie die Umgebungsvariable auf Entwicklung setzen und den Edelstein bedingt laden.
quelle
Wenn Sie die Anwendung mit Passenger Standalone ausführen , erstellen Sie einfach eine
tmp/always_restart
Datei:Siehe Passagier Dokumentation für weitere Informationen.
quelle
Ich mag das Shotgun-Juwel. Wenn Sie eine modulare Sinatra-App verwenden und eine config.ru-Datei haben, ist diese einfach auszuführen.
Schauen Sie sich das Juwel hier an . Es ist ziemlich einfach und es ist keine Konfiguration erforderlich.
quelle
Unter Windows verwende ich mein Neustart-Juwel dafür:
oder mit Rackup:
Sehen Sie hier für weitere Informationen, hoffen , dass Sie es nützlich finden.
quelle
Sie könnten eine Schutzablage verwenden. Aus einem Artikel auf dblock.org :
Fügen Sie dies Ihrem Gemfile hinzu:
Erstellen Sie dann eine
Guardfile
an der Wurzel Ihres Projekts mit diesem Inhalt:Führen Sie zum Schluss Guard wie folgt aus :
bundle exec guard
undrackup
wird jedes Mal neu geladen.quelle
Wenn Sie nur Ihre Vorlagen ändern, werden sie von sinatra immer wieder gerendert, wenn Sie Ihre Umgebung auf Entwicklung einstellen:
quelle