我已经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
使用瘦 via 运行thin start -R config.ru
,但它只重新加载新添加的路由。当我更改已经存在的路线时,它仍然运行旧代码。
当我添加新路线时,它会正确地重新加载它,因此它是可访问的,但它不会重新加载其他任何东西。
例如,如果我将路线更改为
get '/' do
'bar'
end
get '/foo' do
'baz'
end
比/
仍然发球foo
,即使它已经改变,但/foo
会正确地重新加载和发球baz
。
这是正常行为,还是我错过了什么?我希望重新加载整个源文件。我现在能想到的唯一方法是在文件系统更改时重新启动整个网络服务器。
我在 Windows Vista x64 上运行,所以我不能使用shotgun,因为fork()
.