ruby – 在Windows上的每个请求中重新加载Sinatra应用程序

我根据这个 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上运行良好(同样,它比霰弹枪更快).

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...