diff --git a/History.md b/History.md index e34abaa3..a6d47454 100644 --- a/History.md +++ b/History.md @@ -26,6 +26,7 @@ * Configuration: `environment` is read from `RAILS_ENV`, if `RACK_ENV` can't be found (#2022) * Bugfixes + * Fix JSON loading issues on phased-restarts (#2269) * 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) diff --git a/lib/puma.rb b/lib/puma.rb index bd667116..86f5d97a 100644 --- a/lib/puma.rb +++ b/lib/puma.rb @@ -20,6 +20,7 @@ module Puma end def self.stats + require 'json' @get_stats.stats.to_json end diff --git a/lib/puma/app/status.rb b/lib/puma/app/status.rb index efffc43c..0fdef382 100644 --- a/lib/puma/app/status.rb +++ b/lib/puma/app/status.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'json' - module Puma module App # Check out {#call}'s source code to see what actions this web application @@ -19,6 +17,10 @@ module Puma return rack_response(403, 'Invalid auth token', 'text/plain') end + if env['PATH_INFO'] =~ /\/(gc-stats|stats|thread-backtraces)$/ + require 'json' + end + case env['PATH_INFO'] when /\/stop$/ @cli.stop diff --git a/lib/puma/cluster.rb b/lib/puma/cluster.rb index 861b231a..aff32ab8 100644 --- a/lib/puma/cluster.rb +++ b/lib/puma/cluster.rb @@ -5,7 +5,6 @@ require 'puma/util' require 'puma/plugin' require 'time' -require 'json' module Puma # This class is instantiated by the `Puma::Launcher` and used @@ -95,6 +94,7 @@ module Puma def ping!(status) @last_checkin = Time.now + require 'json' @last_status = JSON.parse(status, symbolize_names: true) end @@ -330,6 +330,7 @@ module Puma while true sleep Const::WORKER_CHECK_INTERVAL begin + require 'json' io << "p#{Process.pid}#{server.stats.to_json}\n" rescue IOError Thread.current.purge_interrupt_queue if Thread.current.respond_to? :purge_interrupt_queue