我根据这个
thread建立了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
运行瘦瘦的启动-R config.ru,但它只重新加载新添加的路线.当我更改现有路由时,它仍然运行旧代码.
当我添加新路由时,它会正确地重新加载它,因此它是可访问的,但它不会重新加载任何其他内容.
例如,如果我将路线更改为
- get '/' do
- 'bar'
- end
- get '/foo' do
- 'baz'
- end
虽然它已经改变了,但是/仍然会服务foo,但是/ foo会正确地重新加载并服务baz.
这是正常的行为,还是我错过了什么?我希望重新加载整个源文件.我现在想到的唯一方法是在文件系统更改时重新启动整个Web服务器.
我在Windows Vista x64上运行,因此我不能因为fork()而使用霰弹枪.
解决方法
您可以尝试使用
sinatra-reloader,这在Windows上运行良好(同样,它比霰弹枪更快).