Skip to content

@nateberkopec nateberkopec released this Aug 8, 2019 · 12 commits to master since this release

  • 4 features

    • Add REQUEST_PATH on parse error message (#1831)
    • You can now easily add custom log formatters with the log_formatter config option (#1816)
    • Puma.stats now provides process start times (#1844)
    • Add support for disabling TLSv1.1 (#1836)
  • 7 bugfixes

    • Fix issue where Puma was creating zombie process entries (#1887)
    • Fix bugs with line-endings and chunked encoding (#1812)
    • RACK_URL_SCHEME is now set correctly in all conditions (#1491)
    • We no longer mutate global STDOUT/STDERR, particularly the sync setting (#1837)
    • SSL read_nonblock no longer blocks (#1857)
    • Swallow connection errors when sending early hints (#1822)
    • Backtrace no longer dumped when invalid pumactl commands are run (#1863)
  • 5 other

  • 1 known issue

    • Some users are still experiencing issues surrounding socket activation and Unix sockets (#1842)

Codename: Fourth and One


Assets 2

@nateberkopec nateberkopec released this Jul 11, 2019 · 49 commits to master since this release

  • 2 bugfixes
    • Fix socket removed after reload - should fix problems with systemd socket activation. (#1829)
    • Add extconf tests for DTLS_method & TLS_server_method, use in minissl.rb. Should fix "undefined symbol: DTLS_method" when compiling against old OpenSSL versions. (#1832)
  • 1 other
    • Removed unnecessary RUBY_VERSION checks. (#1827)
Assets 2

@schneems schneems released this Jun 25, 2019 · 57 commits to master since this release

9 feature

  • Add support for disabling TLSv1.0 (#1562)
  • Request body read time metric (#1569)
  • Add out_of_band hook (#1648)
  • Re-implement (native) IOBuffer for JRuby (#1691)
  • Min worker timeout (#1716)
  • Add option to suppress SignalException on SIGTERM (#1690)
  • Allow mutual TLS CA to be set using ssl_bind DSL (#1689)
  • Reactor now uses nio4r instead of select (#1728)

9 bugfixes

  • Do not accept new requests on shutdown (#1685, #1808)
  • Fix 3 corner cases when request body is chunked (#1508)
  • Change pid existence check's condition branches (#1650)
  • Don't call .stop on a server that doesn't exist (#1655)
  • Implemented NID_X9_62_prime256v1 (P-256) curve over P-521 (#1671)
  • Fix @notify.close can't modify frozen IOError (RuntimeError) (#1583)
  • Fix Java 8 support (#1773)
  • Fix error uninitialized constant Puma::Cluster (#1731)
  • Fix not_token being able to be set to true (#1803)
Assets 2

@schneems schneems released this Mar 19, 2019 · 0 commits to v3.12.1 since this release


Assets 2
Jan 4, 2019


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](

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

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 ``. [SO about versus 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 ``.

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

@schneems schneems released this Apr 12, 2018 · 275 commits to master since this release

v 3.11.4
Assets 2
Mar 6, 2018
Version 3.11.3
Jan 19, 2018
Version 3.11.2
Jan 19, 2018
Version 3.11.1
You can’t perform that action at this time.