8000 Tags · jessebs/puma · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Tags: jessebs/puma

Tags

v3.12.1

Toggle v3.12.1's commit message
Rack handler should use provided default host

This issue is somewhat tricky. When Rails is booted via `rails server` there are two types of configuration options passed, ones specified directly by a user like `rails s -p 3001` will always "win".

For any other config that is not explicitly passed in, puma will consider it a "default". For example when you run `rails s` (without -p) then the default port will be 3000.

There is one other way to configure puma though, and that is via a config file:

```
# config/puma.rb
port 3002
```

This is the order of precedence for configuration

1) Anything the user explicitly passes to `rails s`
2) Config specified in `config/puma.rb` file
3) Default values passed in via `rails s`
4) Defaults values stored in puma

This fallback mechanism works well except in the case of calling `port` in a `config/puma.rb` file. To understand look at the [old method definition](https://github.com/puma/puma/blob/2668597ec1dd9546d83db9f2ec5ad092add483e6/lib/puma/dsl.rb#L140-L145):

```
def port(port, host=nil)
  host ||= Configuration::DefaultTCPHost
  bind "tcp://#{host}:#{port}"
end
```

When the `port` method gets called, even if the user did not specify a `host` the `Configuration::DefaultTCPHost` will be used, which is a problem for local development because it defaults to `0.0.0.0`. [SO about 0.0.0.0 versus localhost](https://stackoverflow.com/questions/20778771/what-is-the-difference-between-0-0-0-0-127-0-0-1-and-localhost).

In this case, while a user did directly specify a port, they did not specify a host, so you would expect the `rails s` defaults passed in to take affect.

To make Puma respect that the host coming from `rails s` has more precedence than it's own default host, we must introduce the ability to set and retrieve a default_host value.

This is then used in the rack handler so when `rails s` passes in `:Host => "localhost"` then it is used instead of reverting to `0.0.0.0`.

The issue with puma#1699 is the test was wrong, it would have failed if a config file was present with a `port` invocation.

v3.12.0

Toggle v3.12.0's commit message
Version 3.12.0

v3.11.4

Toggle v3.11.4's commit message
v 3.11.4

v3.11.3

Toggle v3.11.3's commit message
Version 3.11.3

v3.11.2

Toggle v3.11.2's commit message
Version 3.11.2

v3.11.1

Toggle v3.11.1's commit message
Version 3.11.1

v3.11.0

Toggle v3.11.0's commit message
Version 3.11.0

v3.10.0

Toggle v3.10.0's commit message
Version 3.10.0

v3.9.1

Toggle v3.9.1's commit message
Tagging v3.9.1.

v3.9.0

Toggle v3.9.0's commit message
Tagging v3.9.0.

0