History.md
Bugfixes
prune_bundler stripping user-configured BUNDLE_* env vars (e.g. BUNDLE_WITHOUT) on re-exec, which caused workers to crash on boot (#3929)Performance
Docs
Features
env["puma.mark_as_io_bound"] API and max_io_threads config to allow IO-bound requests to exceed the thread pool max, enabling better handling of mixed workloads (#3816, #3894)single and cluster DSL hooks for mode-specific configuration (#3621)on_force option to shutdown_debug to only dump thread backtraces on forced (non-graceful) shutdown (#3671)update_thread_pool_min_max and ServerPluginControl (#3658)Bugfixes
fork_worker to avoid forking from stale worker 0 when it has been replaced (#3853)Performance
Refactor
Docs
persistent_timeout and worker_boot_timeout in DSL docs (#3912)Breaking changes
0.0.0.0 to :: (IPv6) when a non-loopback IPv6 interface is available; falls back to 0.0.0.0 if IPv6 is unavailable (#3847)Features
Bugfixes
Performance
Refactor
Docs
docs/deployment.md in README.md (#3848)GOVERNANCE.md, MAINTAINERS (#3826)CI
Features
Bugfixes
PUMA_LOG_CONFIG=1 logging twice with prune_bundler enabled (#3778)PUMA_LOG_CONFIG=1 output (#3779)Thread.current.puma_server in Thread init code, not every request (#3774)Bugfixes
Performance
Performance
Bugfixes
max_keep_alive to 999 (#3719)persistent_timeout default to 65 seconds (#3378)ruby_engine method, deprecated Nov-2024 (#3701)preload_app! is now the default for clustered mode (#3297)clamp-d before reading any values (#3297)| Old hook name | New hook name |
|---|---|
| on_worker_boot | before_worker_boot |
| on_worker_shutdown | before_worker_shutdown |
| on_restart | before_restart |
| on_booted | after_booted |
| on_stopped | after_stopped |
| on_refork | before_refork |
| on_thread_start | before_thread_start |
| on_thread_exit | before_thread_exit |
| on_worker_fork | before_worker_fork |
Features
Bugfixes
env[QUERY_STRING] (#3713, #3625)NoMethodError in Reactor#select_loop (#3696, #3695)preload_app! doc (#3712)Performance
@reactor and @env_set_http_version (#3714)Refactor
to_path to be nil on request bodies (#3635)rack.after_reply so it doesn't interrupt chain on error (#3680)Features
ThreadPool trimmer and reaper thread names (#3383)Threadpool#trim thread if pool size is fixed (#3384)Bugfixes
Performance
Refactor
Features
enable_keep_alive. true mimics existing behavior, but now can use false to disable keepalive to reduce queue tail latency (#3496)ssl_ciphersuites option for TLSv1.3 ciphers (#3359, #3343)--threads 5 or threads 5 to config max/min threads with a single number (used to need to say 5:5) (#3309)on_stopped hook (#3411, #3380)Bugfixes
external_encoding, set_encoding, binmode, binmode? (#3214)Puma::Server.current. (#3360)Process.detach used (#3314, #3313)JRuby
Performance
Refactor
start_with?, add test (#3510)Puma::Rack::Builder (#3340)Docs
Bugfixes
idle-timeout not working in cluster mode (#3235, #3228, #3282, #3283)Maintenance
Docs
Features
Refactor
Bugfixes
Features
Bugfixes
Refactor
Features
Bugfixes
Features
Bugfixes
Performance
Breaking Changes
PUMA_ (#2924, #2853)Client, Cluster::Worker, Cluster::Worker, HandleRequest. (#2988)DefaultRackup removed (#2928)LogWriter from Events (#2798)Features
run_hooks to pass a hash to blocks for use later (#2917, #2915)preload_app! with fork_worker (#2907)Bugfixes
Refactor
Feature
Bugfixes
closed. (GHSA-rmj8-8hhh-gv5h, related to #2809)Features
localhost integration in ssl_bind (#2764, #2708)Bugfixes
Errno::EBADF) for @notify.close (#2745)Refactor
Feature (added as mistake - we don't normally do this on bugfix releases, sorry!)
Security
Features
Bugfixes
Performance
Features
Bugfixes
Refactor
IO.select with IO#wait_* when checking a single IO (#2666)Features
Bugfixes
Performance
Refactor
Features
flush after writing messages to avoid mutating $stdout and $stderr using sync=true (#2486)Bugfixes
#string method to Puma::NullIO (#2520)Refactor
Features
PUMA_LOG_CONFIG is present (#2472)QUERY_STRING max length (#2485)Bugfixes
json gem (#2473)json gem to fix phased restart errors (#2479)Bugfixes
Bundler::GemNotFound errors for nio4r gem during phased restarts (#2427, #2018)on_booted after server starts (#2431, #2212)Refactor
Bugfixes
Refactor
Features
fork_worker option and refork command for reduced memory usage by forking from a worker process instead of the master process. (#2099)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).nakayoshi_fork option. Reduce memory usage in preloaded cluster-mode apps by GCing before fork and compacting, where available. (#2093, #2256)thread-backtraces command to print thread backtraces (#2054)requests_count to Puma.stats. (#2106)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)state_permission to config DSL to set state file permissions (#2238)Puma.stats_hash, which returns a stats in Hash instead of a JSON string (#2086, #2253)rack.multithread and rack.multiprocess now dynamically resolved by max_thread and workers respectively (#2288)Deprecations, Removals and Breaking API Changes
--control has been removed. Use --control-url (#1487)worker_directory has been removed. Use directory.preload_app! is on by default if number of workers > 1 and set via WEB_CONCURRENCY (#2143)tcp_mode has been removed without replacement. (#2169)environment is read from RAILS_ENV, if RACK_ENV can't be found (#2022)Bugfixes
BUNDLE_GEMFILE env var when using prune_bundler (#1893)BUNDLE_GEMFILE is unspecified in workers if unspecified in master when using prune_bundler (#2154)Connection: closed header when queue requests is disabled (#2216)out_of_band hook never executed if the number of worker threads is > 1 (#2177)UserFileDefaultOptions#fetch to properly use default (#2233)out_of_band hook (#2234)CONTENT_LENGTH for chunked requests (#2287)ClassNotFound exception when using MiniSSL with Java8.prune_bundler (#2319).Refactor
Configuration.random_token and remove insecure fallback (#2102)Runner#start_control URL parsing (#2111)Rack::Handler::Puma.run to use **options (#2189)Each patchlevel release contains a separate security fix. We recommend simply upgrading to 4.3.5/3.12.6.
Features
Bugfixes
config/puma/<environment>.rb config files (#1885)4 features
7 bugfixes
5 other
1 known issue
9 features
ssl_bind DSL (#1689)select (#1728)10 bugfixes
uninitialized constant Puma::Cluster (#1731)not_token being able to be set to true (#1803)5 features:
max_threads is now in Puma.stats (#1604)Puma.stats (#1579)--control is now deprecated in favor of --control-url (#1487)2 bugfixes:
2 features:
9 bugfixes:
2 other:
3 features:
12 bugfixes:
3 refactors:
1 known issue:
2 features:
9 bugfixes:
1 known issue:
1 refactor:
2 bugfixes:
1 feature:
1 refactor:
6 minor features:
stdout or stderr is not writable. (#1175)5 refactors:
14 bugfixes:
get_dh1024 compatible with OpenSSL v1.1.0 (#1178)uninitialized constant Puma::StateFile (#1138)3 others:
1 bug fix:
8 bug fixes:
2 new project committers:
1 bug fix:
1 PR merged:
1 minor features:
9 bug fixes:
TCPLogger log error in tcp cluster mode.5 doc fixes:
14 PRs merged:
2 minor features:
3 unknowns:
5 doc fixes:
3 PRs merged:
2 minor features:
2 doc fixes:
3 PRs merged:
1 deprecation removal:
3 bug fixes:
2 PRs merged:
4 bug fixes:
3 PRs merged:
1 minor feature:
5 bug fixes:
5 bug fixes:
pid for #Puma::ControlCLI:0x007f185fcef968' when execute pumactl with --pid option.windows? for Puma:Module' when execute pumactl.plugin :tmp_restart behavior correct in Windows.3 PRs merged:
1 bug fix:
2 major changes:
2 major features:
4 minor features:
5 bug fixes:
5 doc fixes:
10 merged PRs:
7 minor features:
old_worker_count in stats url7 bug fixes:
1 doc changes:
12 merged PRs
1 bug fix:
2 bug fixes:
2 PRs merged:
1 bug fix:
6 minor features:
5 bug fixes:
10 doc fixes:
18 PRs merged:
1 minor feature:
1 bug fix:
Seriously, I need to revamp config with tests.
The "clearly I don't have enough tests for the config" release.
1 minor feature:
3 bug fixes:
1 deprecation:
4 PRs merged:
8 minor bugs fixed:
4 PRs merged:
1 test fix:
2 bug fixes:
1 doc change:
1 PR merged:
13 bug fixes:
8 doc/test changes:
2 ops changes:
16 PRs merged:
5 bug fixes:
1 PR merged:
2 minor features:
on_worker_fork hook, which allows to mimic Unicorn's behavior4 bug fixes:
1 doc fixes:
6 PRs merged:
2 bug fixes:
2 PRs merged:
9 bug fixes:
6 minor features:
10 PRs merged:
1 bug fix:
This change means errors loading the app are now reported only in the redirected stdout/stderr.
If you're app has problems starting up, start it without daemon mode initially to test.
3 minor features:
5 bug fixes:
2 doc changes:
9 Merged PRs:
8 bug fixes:
6 PRs merged:
4 bug fixes:
2 PRs merged:
1 minor feature:
3 bug fixes:
4 doc fixes:
6 PRs merged:
4 bug fixes:
4 doc fixes:
preload_app! instead of preload_app11 PRs merged:
1 bug fixes:
2 doc changes:
6 PRs merged:
8 minor features:
7 bug fixes:
4 doc changes:
14 PRs merged:
1 minor feature:
N bug fixes:
cd so that rvm gemset is loaded2 minor features:
4 bug fixes:
2 minor features:
pumactl restart start puma if not running6 bug fixes:
6 misc changes:
5 minor features:
10 bug fixes:
2 bug fixes:
1 doc change:
1 major bug fix:
5 minor bug fixes:
2 internal changes:
1 minor feature:
1 bug fix:
1 major feature:
2 minor bugfixes:
2 minor bug fixes:
3 minor features:
15 bug fixes:
-C config file and on_worker_boot-w3 doc changes:
RailsConf 2013 edition!
2 doc changes:
2 bug fixes:
3 minor changes:
5 minor enhancements:
12 bug fixes:
2 minor enhancements:
1 bug fix:
2 major features:
2 minor features:
5 bug fixes:
5 minor feature:
7 bug fixes:
1 major feature:
1 bug fix:
NOTE: SSL support in JRuby is not supported at present. Support will be added back in a future date when a java Puma::MiniSSL is added.
7 contributors to this release:
6 bug fixes:
3 minor features:
1 bug fix:
1 experimental feature:
2 minor features:
4 bug fixes:
1 new contributor:
1 major feature:
When possible, the internal restart does a "hot restart" meaning the server sockets remains open, so no connections are lost.
1 minor feature:
6 bug fixes:
2 new contributors:
1 bugfix:
1 minor feature:
Features
Bugfixes