5.0.0
-
Features
- Allow compiling without OpenSSL and dynamically load files needed for SSL, add 'no ssl' CI (#2305)
- EXPERIMENTAL: Add
fork_worker
option andrefork
command for reduced memory usage by forking from a worker process instead of the master process. (#2099) - EXPERIMENTAL: Added
wait_for_less_busy_worker
config. This may reduce latency on MRI through inserting a small delay before re-listening on the socket if worker is busy (#2079). - EXPERIMENTAL: Added
nakayoshi_fork
option. Reduce memory usage in preloaded cluster-mode apps by GCing before fork and compacting, where available. (#2093, #2256) - Added pumactl
thread-backtraces
command to print thread backtraces (#2054) - Added incrementing
requests_count
toPuma.stats
. (#2106) - Increased maximum URI path length from 2048 to 8192 bytes (#2167, #2344)
lowlevel_error_handler
is now called during a forced threadpool shutdown, and if a callable with 3 arguments is set, we now also pass the status code (#2203)- Faster phased restart and worker timeout (#2220)
- Added
state_permission
to config DSL to set state file permissions (#2238) - Added
Puma.stats_hash
, which returns a stats in Hash instead of a JSON string (#2086, #2253) rack.multithread
andrack.multiprocess
now dynamically resolved bymax_thread
andworkers
respectively (#2288)
-
Deprecations, Removals and Breaking API Changes
--control
has been removed. Use--control-url
(#1487)worker_directory
has been removed. Usedirectory
.- min_threads now set by environment variables PUMA_MIN_THREADS and MIN_THREADS. (#2143)
- max_threads now set by environment variables PUMA_MAX_THREADS and MAX_THREADS. (#2143)
- max_threads default to 5 in MRI or 16 for all other interpreters. (#2143)
- preload by default if workers > 1 (#2143)
- Puma::Plugin.workers_supported? has been removed. Use Puma.forkable? instead. (#2143)
tcp_mode
has been removed without replacement. (#2169)- Daemonization has been removed without replacement. (#2170)
- Changed #connected_port to #connected_ports (#2076)
- Configuration:
environment
is read fromRAILS_ENV
, ifRACK_ENV
can't be found (#2022) - Log binding on http:// for TCP bindings to make it clickable
-
Bugfixes
- Fix JSON loading issues on phased-restarts (#2269)
- Improve shutdown reliability (#2312, #2338)
- Close client http connections made to an ssl server with TLSv1.3 (#2116)
- Do not set user_config to quiet by default to allow for file config (#2074)
- Always close SSL connection in Puma::ControlCLI (#2211)
- Windows update extconf.rb for use with ssp and varied Ruby/MSYS2 combinations (#2069)
- Ensure control server Unix socket is closed on shutdown (#2112)
- Preserve
BUNDLE_GEMFILE
env var when usingprune_bundler
(#1893) - Send 408 request timeout even when queue requests is disabled (#2119)
- Rescue IO::WaitReadable instead of EAGAIN for blocking read (#2121)
- Ensure
BUNDLE_GEMFILE
is unspecified in workers if unspecified in master when usingprune_bundler
(#2154) - Rescue and log exceptions in hooks defined by users (on_worker_boot, after_worker_fork etc) (#1551)
- Read directly from the socket in #read_and_drop to avoid raising further SSL errors (#2198)
- Set
Connection: closed
header when queue requests is disabled (#2216) - Pass queued requests to thread pool on server shutdown (#2122)
- Fixed a few minor concurrency bugs in ThreadPool that may have affected non-GVL Rubies (#2220)
- Fix
out_of_band
hook never executed if the number of worker threads is > 1 (#2177) - Fix ThreadPool#shutdown timeout accuracy (#2221)
- Fix
UserFileDefaultOptions#fetch
to properly usedefault
(#2233) - Improvements to
out_of_band
hook (#2234) - Prefer the rackup file specified by the CLI (#2225)
- Fix for spawning subprocesses with fork_worker option (#2267)
- Set
CONTENT_LENGTH
for chunked requests (#2287) - JRuby - Add Puma::MiniSSL::Engine#init? and #teardown methods, run all SSL tests (#2317)
- Improve shutdown reliability (#2312)
- Resolve issue with threadpool waiting counter decrement when thread is killed
- Constrain rake-compiler version to 0.9.4 to fix
ClassNotFound
exception when using MiniSSL with Java8. - Fix recursive
prune_bundler
(#2319). - Ensure that TCP_CORK is usable
- Fix corner case when request body is chunked (#2326)
- Fix filehandle leak in MiniSSL (#2299)
-
Refactor
- Remove unused loader argument from Plugin initializer (#2095)
- Simplify
Configuration.random_token
and remove insecure fallback (#2102) - Simplify
Runner#start_control
URL parsing (#2111) - Removed the IOBuffer extension and replaced with Ruby (#1980)
- Update
Rack::Handler::Puma.run
to use**options
(#2189) - ThreadPool concurrency refactoring (#2220)
- JSON parse cluster worker stats instead of regex (#2124)
- Support parallel tests in verbose progress reporting (#2223)
- Refactor error handling in server accept loop (#2239)