Ich verwende
# my_app.rb
load 'index.rb'
und starten Sie den Sever wie folgt
ruby my_app.rb
aber es lädt nie die Änderungen, die ich auf der Indexseite vorgenommen habe.
Habe ich hier etwas verpasst?
Ich verwende
# my_app.rb
load 'index.rb'
und starten Sie den Sever wie folgt
ruby my_app.rb
aber es lädt nie die Änderungen, die ich auf der Indexseite vorgenommen habe.
Habe ich hier etwas verpasst?
Siehe die Sinatra FAQ,
"Wie mache ich mein Sinatra-App neu laden bei Änderungen?"
Zunächst einmal ist das in-process Code-Neuladen in Ruby schwierig, und eine Lösung, die für jede Situation funktioniert, ist technisch unmöglich.
Deshalb empfehlen wir dir, das Out-of-Process-Neuladen zu machen.
Zuerst musst du rerun installieren, falls du es noch nicht getan hast:
$ gem install rerun
Jetzt, wenn du dein Sinatra-App so startest:
$ ruby app.rb
Alles, was du für das Neuladen tun musst, ist stattdessen dies zu tun:
$ rerun 'ruby app.rb'
Wenn du beispielsweise rackup verwendest, mache stattdessen folgendes:
$ rerun 'rackup'
Du verstehst schon.
Wenn du immer noch das in-process Neuladen möchtest, schau dir
Sinatra::Reloader
an.
Das Shotgun benötigt eine minimale config.ru. Wenn Sie noch keine haben, erstellen Sie eine und setzen Sie "require './my_app'" (wobei my_app.rb Ihre Ruby-App ist) hinein und Sie sind fertig.
gem install sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Hinweis: Es lädt nur die sinatra-Handler neu (und vielleicht einige sinatra-Serverkonfigurationsbefehle), nicht jedoch benutzerdefinierte Dateien, die manuell neu geladen werden müssen.
UPDATE nach 9 Jahren: Es scheint bereits möglich zu sein, auch andere Dateien mit also_reload
, dont_reload
und after_reload
neu zu laden -- https://github.com/sinatra/sinatra/pull/1150
Hey @Nakilon, wie kann ich solche Dateien manuell neu laden? Ich mache require "./my-file"
ohne Erfolg.
@kristianlm, require
lädt die Datei nicht erneut, wenn sie bereits erforderlich war. Verwenden Sie stattdessen load
.
Du hast recht. Ich muss jedoch meine server.rb
neu speichern, um die externe Datei neu zu laden. Es überprüft nicht nur meine externe Datei, also muss ich jedes Mal meine server.rb
neu speichern, wenn ich eine Änderung an meiner externen Datei vornehme. Shotgun scheint in dieser Hinsicht besser zu funktionieren, aber es lädt auch die Datenbanksitzungen neu.
Wenn Sie die Anwendung mit Passenger Standalone ausführen, erstellen Sie einfach eine tmp/always_restart
Datei:
$ touch tmp/always_restart.txt
Weitere Informationen finden Sie in der Passenger Dokumentation.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.