lib/hx/cli.rb in hx-0.20.0 vs lib/hx/cli.rb in hx-0.21.0
- old
+ new
@@ -25,10 +25,11 @@
require 'ostruct'
require 'optparse'
require 'pathname'
require 'tempfile'
require 'webrick'
+require 'thread'
require 'rack'
require 'rack/mock'
require 'rack/handler/webrick'
require 'hx/rack/application'
@@ -105,24 +106,28 @@
base_url = "http://localhost:#{real_port}/"
server.logger.info "Serving on #{base_url}"
config_file = site.options[:config_file]
- mtime = nil
+
+ reload_lock = Mutex.new
site_app = nil
+ mtime = nil
app = Proc.new { |env|
- unless site_app and File.mtime(config_file) == mtime
- # reload the site/config, folding in the new base URL
- site = Hx::Site.load_file(config_file, :base_url => base_url)
- mtime = File.mtime(config_file)
- site_app = Hx::Rack::Application.new(site, site.options)
- end
- site_app.call(env)
+ reload_lock.synchronize {
+ unless File.mtime(config_file) == mtime
+ # reload the site/config, folding in the new base URL
+ site = Hx::Site.load_file(config_file, :base_url => base_url)
+ mtime = File.mtime(config_file)
+ site_app = Hx::Rack::Application.new(site, site.options)
+ end
+ site_app
+ }.call(env)
}
# force application load
- Rack::MockRequest.new(app).get("/")
+ ::Rack::MockRequest.new(app).get("/")
server.mount('/', ::Rack::Handler::WEBrick, app)
%w(INT TERM).each { |s| trap(s) { server.shutdown } }
server.start
end