【发布时间】:2010-12-27 15:20:11
【问题描述】:
我已经根据这个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
通过thin start -R config.ru 运行精简,但它只重新加载新添加的路由。当我更改已经存在的路线时,它仍然运行旧代码。
当我添加新路由时,它会正确地重新加载它,因此它可以访问,但它不会重新加载其他任何东西。
例如,如果我将路线更改为
get '/' do
'bar'
end
get '/foo' do
'baz'
end
/ 仍然会为foo 提供服务,即使它已更改,但/foo 会正确重新加载并为baz 提供服务。
这是正常行为,还是我遗漏了什么?我希望重新加载整个源文件。我现在能想到的唯一方法是在文件系统更改时重新启动整个网络服务器。
我在 Windows Vista x64 上运行,因此我无法使用 shotgun,因为 fork()。
【问题讨论】:
标签: ruby sinatra rack reloading