diff --git a/lib/puma/dsl.rb b/lib/puma/dsl.rb index b5bebf43ce..a342200edf 100644 --- a/lib/puma/dsl.rb +++ b/lib/puma/dsl.rb @@ -57,6 +57,14 @@ def _offer_plugins @plugins.clear end + def set_default_host(host) + @options[:default_host] = host + end + + def default_host + @options[:default_host] || Configuration::DefaultTCPHost + end + def inject(&blk) instance_eval(&blk) end @@ -140,7 +148,7 @@ def clear_binds! # Define the TCP port to bind to. Use +bind+ for more advanced options. # def port(port, host=nil) - host ||= Configuration::DefaultTCPHost + host ||= default_host bind "tcp://#{host}:#{port}" end diff --git a/lib/rack/handler/puma.rb b/lib/rack/handler/puma.rb index 3ff189584b..4607b7c103 100644 --- a/lib/rack/handler/puma.rb +++ b/lib/rack/handler/puma.rb @@ -49,6 +49,9 @@ def self.config(app, options = {}) self.set_host_port_to_config(host, port, user_config) end + if default_options[:Host] + file_config.set_default_host(default_options[:Host]) + end self.set_host_port_to_config(default_options[:Host], default_options[:Port], default_config) user_config.app app diff --git a/test/test_rack_handler.rb b/test/test_rack_handler.rb index 5007e20e59..3f3a6987c9 100644 --- a/test/test_rack_handler.rb +++ b/test/test_rack_handler.rb @@ -123,6 +123,44 @@ def test_config_file_wins_over_port end end end + + def test_default_host_when_using_config_file + user_port = 5001 + file_port = 6001 + + Dir.mktmpdir do |d| + Dir.chdir(d) do + FileUtils.mkdir("config") + File.open("config/puma.rb", "w") { |f| f << "port #{file_port}" } + + @options[:Host] = "localhost" + @options[:Port] = user_port + conf = Rack::Handler::Puma.config(->{}, @options) + conf.load + + assert_equal ["tcp://localhost:#{file_port}"], conf.options[:binds] + end + end + end + + def test_default_host_when_using_config_file_with_explicit_host + user_port = 5001 + file_port = 6001 + + Dir.mktmpdir do |d| + Dir.chdir(d) do + FileUtils.mkdir("config") + File.open("config/puma.rb", "w") { |f| f << "port #{file_port}, '1.2.3.4'" } + + @options[:Host] = "localhost" + @options[:Port] = user_port + conf = Rack::Handler::Puma.config(->{}, @options) + conf.load + + assert_equal ["tcp://1.2.3.4:#{file_port}"], conf.options[:binds] + end + end + end end class TestUserSuppliedOptionsIsNotPresent < Minitest::Test