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

前端之家收集整理的这篇文章主要介绍了ruby – 在Windows上的每个请求中重新加载Sinatra应用程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我根据这个 thread建立了Rack :: Reload
  1. # config.ru
  2. require 'rubygems'
  3. require 'sinatra'
  4.  
  5. set :environment,:development
  6.  
  7. require 'app'
  8. run Sinatra::Application
  9.  
  10. # app.rb
  11. class Sinatra::Reloader < Rack::Reloader
  12. def safe_load(file,mtime,stderr = $stderr)
  13. if file == Sinatra::Application.app_file
  14. ::Sinatra::Application.reset!
  15. stderr.puts "#{self.class}: reseting routes"
  16. end
  17. super
  18. end
  19. end
  20.  
  21. configure(:development) { use Sinatra::Reloader }
  22.  
  23. get '/' do
  24. 'foo'
  25. end

运行瘦瘦的启动-R config.ru,但它只重新加载新添加的路线.当我更改现有路由时,它仍然运行旧代码.

当我添加新路由时,它会正确地重新加载它,因此它是可访问的,但它不会重新加载任何其他内容.

例如,如果我将路线更改为

  1. get '/' do
  2. 'bar'
  3. end
  4.  
  5. get '/foo' do
  6. 'baz'
  7. end

虽然它已经改变了,但是/仍然会服务foo,但是/ foo会正确地重新加载并服务baz.

这是正常的行为,还是我错过了什么?我希望重新加载整个源文件.我现在想到的唯一方法是在文件系统更改时重新启动整个Web服务器.

我在Windows Vista x64上运行,因此我不能因为fork()而使用霰弹枪.

解决方法

您可以尝试使用 sinatra-reloader,这在Windows上运行良好(同样,它比霰弹枪更快).

猜你在找的Ruby相关文章