Я настроил Rack::Reload
в соответствии с этим потоком
# 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
Запуск с тонким через thin start -R config.ru
, но он только перезагружает только что добавленные маршруты. Когда я изменяю уже существующий маршрут, он все еще выполняет старый код.
Когда я добавляю новый маршрут, он корректно перезагружает его, поэтому он доступен, но больше ничего не перезагружается.
Например, если я изменил маршруты на
get '/' do
'bar'
end
get '/foo' do
'baz'
end
Чем /
все равно будет обслуживать foo
, даже если оно изменилось, но /foo
будет правильно перезагружаться и обслуживать baz
.
Это нормальное поведение или я что-то упустил? Я ожидаю, что весь исходный файл будет перезагружен. Единственный способ обойти это сейчас - перезапустить весь веб-сервер при изменении файловой системы.
Я работаю на Windows Vista x64, поэтому не могу использовать дробовик из-за fork()
.