module Glim::LocalServer
Public Class Methods
start(config)
click to toggle source
# File lib/local_server.rb, line 320 def self.start(config) config['url'] = "http://#{config['host']}:#{config['port']}" project_dir = config.site.project_dir websocket_server, listener = nil, nil if config['livereload'] websocket_server = WebSocket::Server.new(host: config['host'], port: config['livereload_port']) websocket_server.start end server = WEBrick::HTTPServer.new( BindAddress: config['host'], Port: config['port'], Logger: WEBrick::Log.new('/dev/null'), AccessLog: [], ) server.mount('/', Servlet, config) if config['watch'] || config['livereload'] listener = Listen.to(project_dir) do |modified, added, removed| paths = [ *modified, *added, *removed ] $log.debug("File changes detected for: #{paths.select { |path| path.start_with?(project_dir) }.map { |path| Util.relative_path(path, project_dir) }.join(', ')}") config.reload websocket_server.broadcast('reload') if websocket_server end $log.debug("Watching #{project_dir} for changes") listener.start end trap("INT") do server.shutdown end if config['open_url'] && File.executable?('/usr/bin/open') page = config.site.links['.'] system('/usr/bin/open', page ? page.url : config['url']) end $log.info("Starting server on #{config['url']}") server.start $log.info("Server shutting down…") listener.stop if listener if websocket_server if config['open_url'] && File.executable?('/usr/bin/open') websocket_server.broadcast('close') end websocket_server.shutdown end end