根据这个帖子,我已经设置好了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
运行thin,但它只会重新加载新添加的路由。当我更改已经存在的路由时,它仍然运行旧代码。
当我添加新路由时,它正确地重新加载它,因此可以访问,但它不会重新加载其他内容。
例如,如果我更改了路由:
get '/' do
'bar'
end
get '/foo' do
'baz'
end
/
仍然可以提供foo
,即使它已经更改,但是/foo
将正确重新加载并提供baz
。这是正常行为吗?还是我漏掉了什么?我期望整个源文件被重新加载。目前我能想到的唯一解决方法是在文件系统更改时重新启动整个Web服务器。我正在运行Windows Vista x64,因此无法使用fork()
,也就无法使用shotgun。