Ich habe Rack::Reload
aufgebaut gemäß dieser threadNachladen Sinatra-Anwendung auf jede Anfrage auf Windows
# config.ru
require 'rubygems'
require 'sinatra'
set :environment, :development
require 'app'
run Sinatra::Application
# app.rb
class Sinatra::Reloader < Rack::Reloader
def safe_load(file, mtime, stderr = $stderr)
if file == Sinatra::Application.app_file
::Sinatra::Application.reset!
stderr.puts "#{self.class}: reseting routes"
end
super
end
end
configure(:development) { use Sinatra::Reloader }
get '/' do
'foo'
end
mit dünnen Lauf über thin start -R config.ru
, aber es lädt nur neu hinzugefügte Routen. Wenn ich die bereits bestehende Route ändere, wird immer noch der alte Code ausgeführt.
Wenn ich eine neue Route hinzufüge, wird sie korrekt neu geladen, ist also zugänglich, lädt aber nichts anderes neu.
Zum Beispiel, wenn ich geändert Routen
get '/' do
'bar'
end
get '/foo' do
'baz'
end
als /
noch foo
dienen würde, auch wenn sie sich geändert hat, aber /foo
würde richtig laden und baz
dienen.
Ist das normales Verhalten, oder fehlt mir etwas? Ich würde erwarten, dass die ganze Quelldatei neu geladen wird. Der einzige Weg, den ich mir gerade vorstellen kann, ist den Neustart des gesamten Webservers, wenn sich das Dateisystem ändert.
Ich bin auf Windows Vista x64 laufen, so kann ich Schrotflinte wegen fork()
nicht verwenden.
Sorry, habe deine Notiz über Shotgun nicht gesehen –