Iterate over 4 ports before giving up and let the user choose a port to listen on

This commit is contained in:
Dennis Günnewig 2015-05-07 09:21:47 +02:00
parent 9741c68d34
commit 1a23ab3938

View file

@ -207,9 +207,26 @@ module Middleman
end end
begin begin
tries ||= 4
tried_ports ||= []
::WEBrick::HTTPServer.new(http_opts) ::WEBrick::HTTPServer.new(http_opts)
rescue Errno::EADDRINUSE rescue Errno::EADDRINUSE
logger.error "== Port #{port} is unavailable. Either close the instance of Middleman already running on #{port} or start this Middleman on a new port with: --port=#{port.to_i + 1}" tries -= 1
tried_ports << port
if tries > 0
logger.error %(== Port #{port} is unavailable. Trying port #{port + 1} next.)
@port += 1
http_opts[:Port] = @port
retry
end
logger.error %(== Ports #{tried_ports.to_sentence} are unavailable. Either close the instances of "Middleman" already running on Ports #{tried_ports.to_sentence} or start this "Middleman"-instance on a another port with: "middleman server --port=#{port + 1}".)
exit(1) exit(1)
end end
end end