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