puma 3.11.4 → 6.0.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puma might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/History.md +1717 -432
- data/LICENSE +23 -20
- data/README.md +190 -64
- data/bin/puma-wild +3 -9
- data/docs/architecture.md +59 -21
- data/docs/compile_options.md +55 -0
- data/docs/deployment.md +69 -58
- data/docs/fork_worker.md +31 -0
- data/docs/images/puma-connection-flow-no-reactor.png +0 -0
- data/docs/images/puma-connection-flow.png +0 -0
- data/docs/images/puma-general-arch.png +0 -0
- data/docs/jungle/README.md +9 -0
- data/{tools → docs}/jungle/rc.d/README.md +1 -1
- data/{tools → docs}/jungle/rc.d/puma +2 -2
- data/{tools → docs}/jungle/rc.d/puma.conf +0 -0
- data/docs/kubernetes.md +66 -0
- data/docs/nginx.md +2 -2
- data/docs/plugins.md +22 -12
- data/docs/rails_dev_mode.md +28 -0
- data/docs/restart.md +47 -22
- data/docs/signals.md +13 -11
- data/docs/stats.md +142 -0
- data/docs/systemd.md +95 -120
- data/docs/testing_benchmarks_local_files.md +150 -0
- data/docs/testing_test_rackup_ci_files.md +36 -0
- data/ext/puma_http11/PumaHttp11Service.java +2 -2
- data/ext/puma_http11/ext_help.h +1 -1
- data/ext/puma_http11/extconf.rb +61 -3
- data/ext/puma_http11/http11_parser.c +106 -118
- data/ext/puma_http11/http11_parser.h +2 -2
- data/ext/puma_http11/http11_parser.java.rl +22 -38
- data/ext/puma_http11/http11_parser.rl +6 -4
- data/ext/puma_http11/http11_parser_common.rl +6 -6
- data/ext/puma_http11/mini_ssl.c +376 -93
- data/ext/puma_http11/no_ssl/PumaHttp11Service.java +15 -0
- data/ext/puma_http11/org/jruby/puma/Http11.java +108 -116
- data/ext/puma_http11/org/jruby/puma/Http11Parser.java +84 -99
- data/ext/puma_http11/org/jruby/puma/MiniSSL.java +250 -88
- data/ext/puma_http11/puma_http11.c +49 -57
- data/lib/puma/app/status.rb +71 -49
- data/lib/puma/binder.rb +243 -148
- data/lib/puma/cli.rb +50 -36
- data/lib/puma/client.rb +373 -233
- data/lib/puma/cluster/worker.rb +175 -0
- data/lib/puma/cluster/worker_handle.rb +97 -0
- data/lib/puma/cluster.rb +268 -235
- data/lib/puma/commonlogger.rb +4 -2
- data/lib/puma/configuration.rb +116 -88
- data/lib/puma/const.rb +49 -30
- data/lib/puma/control_cli.rb +123 -76
- data/lib/puma/detect.rb +33 -2
- data/lib/puma/dsl.rb +685 -135
- data/lib/puma/error_logger.rb +112 -0
- data/lib/puma/events.rb +17 -111
- data/lib/puma/io_buffer.rb +44 -5
- data/lib/puma/jruby_restart.rb +4 -59
- data/lib/puma/json_serialization.rb +96 -0
- data/lib/puma/launcher/bundle_pruner.rb +104 -0
- data/lib/puma/launcher.rb +196 -130
- data/lib/puma/log_writer.rb +137 -0
- data/lib/puma/minissl/context_builder.rb +92 -0
- data/lib/puma/minissl.rb +249 -69
- data/lib/puma/null_io.rb +20 -1
- data/lib/puma/plugin/tmp_restart.rb +3 -1
- data/lib/puma/plugin.rb +9 -13
- data/lib/puma/rack/builder.rb +8 -9
- data/lib/puma/rack/urlmap.rb +2 -0
- data/lib/puma/rack_default.rb +3 -1
- data/lib/puma/reactor.rb +90 -187
- data/lib/puma/request.rb +644 -0
- data/lib/puma/runner.rb +94 -71
- data/lib/puma/server.rb +337 -715
- data/lib/puma/single.rb +27 -72
- data/lib/puma/state_file.rb +46 -7
- data/lib/puma/systemd.rb +47 -0
- data/lib/puma/thread_pool.rb +184 -93
- data/lib/puma/util.rb +23 -10
- data/lib/puma.rb +60 -3
- data/lib/rack/handler/puma.rb +17 -15
- data/tools/Dockerfile +16 -0
- data/tools/trickletest.rb +0 -1
- metadata +53 -33
- data/ext/puma_http11/io_buffer.c +0 -155
- data/lib/puma/accept_nonblock.rb +0 -23
- data/lib/puma/compat.rb +0 -14
- data/lib/puma/convenient.rb +0 -23
- data/lib/puma/daemon_ext.rb +0 -31
- data/lib/puma/delegation.rb +0 -11
- data/lib/puma/java_io_buffer.rb +0 -45
- data/lib/puma/rack/backports/uri/common_193.rb +0 -33
- data/lib/puma/tcp_logger.rb +0 -39
- data/tools/jungle/README.md +0 -19
- data/tools/jungle/init.d/README.md +0 -61
- data/tools/jungle/init.d/puma +0 -421
- data/tools/jungle/init.d/run-puma +0 -18
- data/tools/jungle/upstart/README.md +0 -61
- data/tools/jungle/upstart/puma-manager.conf +0 -31
- data/tools/jungle/upstart/puma.conf +0 -69
data/lib/puma/cli.rb
CHANGED
@@ -1,36 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'optparse'
|
2
4
|
require 'uri'
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
require_relative '../puma'
|
7
|
+
require_relative 'configuration'
|
8
|
+
require_relative 'launcher'
|
9
|
+
require_relative 'const'
|
10
|
+
require_relative 'log_writer'
|
9
11
|
|
10
12
|
module Puma
|
11
13
|
class << self
|
12
|
-
# The CLI exports
|
13
|
-
# apps to pick it up. An app
|
14
|
-
#
|
15
|
-
#
|
14
|
+
# The CLI exports a Puma::Configuration instance here to allow
|
15
|
+
# apps to pick it up. An app must load this object conditionally
|
16
|
+
# because it is not set if the app is launched via any mechanism
|
17
|
+
# other than the CLI class.
|
16
18
|
attr_accessor :cli_config
|
17
19
|
end
|
18
20
|
|
19
21
|
# Handles invoke a Puma::Server in a command line style.
|
20
22
|
#
|
21
23
|
class CLI
|
22
|
-
KEYS_NOT_TO_PERSIST_IN_STATE = Launcher::KEYS_NOT_TO_PERSIST_IN_STATE
|
23
|
-
|
24
24
|
# Create a new CLI object using +argv+ as the command line
|
25
25
|
# arguments.
|
26
26
|
#
|
27
|
-
|
28
|
-
# this object will report status on.
|
29
|
-
#
|
30
|
-
def initialize(argv, events=Events.stdio)
|
27
|
+
def initialize(argv, log_writer = LogWriter.stdio, events = Events.new)
|
31
28
|
@debug = false
|
32
29
|
@argv = argv.dup
|
33
|
-
|
30
|
+
@log_writer = log_writer
|
34
31
|
@events = events
|
35
32
|
|
36
33
|
@conf = nil
|
@@ -66,7 +63,7 @@ module Puma
|
|
66
63
|
end
|
67
64
|
end
|
68
65
|
|
69
|
-
@launcher = Puma::Launcher.new(@conf, :events => @events, :argv => argv)
|
66
|
+
@launcher = Puma::Launcher.new(@conf, :log_writer => @log_writer, :events => @events, :argv => argv)
|
70
67
|
end
|
71
68
|
|
72
69
|
attr_reader :launcher
|
@@ -78,12 +75,20 @@ module Puma
|
|
78
75
|
@launcher.run
|
79
76
|
end
|
80
77
|
|
81
|
-
|
78
|
+
private
|
82
79
|
def unsupported(str)
|
83
|
-
@
|
80
|
+
@log_writer.error(str)
|
84
81
|
raise UnsupportedOption
|
85
82
|
end
|
86
83
|
|
84
|
+
def configure_control_url(command_line_arg)
|
85
|
+
if command_line_arg
|
86
|
+
@control_url = command_line_arg
|
87
|
+
elsif Puma.jruby?
|
88
|
+
unsupported "No default url available on JRuby"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
87
92
|
# Build the OptionParser object to handle the available options.
|
88
93
|
#
|
89
94
|
|
@@ -94,17 +99,21 @@ module Puma
|
|
94
99
|
user_config.bind arg
|
95
100
|
end
|
96
101
|
|
102
|
+
o.on "--bind-to-activated-sockets [only]", "Bind to all activated sockets" do |arg|
|
103
|
+
user_config.bind_to_activated_sockets(arg || true)
|
104
|
+
end
|
105
|
+
|
97
106
|
o.on "-C", "--config PATH", "Load PATH as a config file" do |arg|
|
98
107
|
file_config.load arg
|
99
108
|
end
|
100
109
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
110
|
+
# Identical to supplying --config "-", but more semantic
|
111
|
+
o.on "--no-config", "Prevent Puma from searching for a config file" do |arg|
|
112
|
+
file_config.load "-"
|
113
|
+
end
|
114
|
+
|
115
|
+
o.on "--control-url URL", "The bind url to use for the control server. Use 'auto' to use temp unix server" do |arg|
|
116
|
+
configure_control_url(arg)
|
108
117
|
end
|
109
118
|
|
110
119
|
o.on "--control-token TOKEN",
|
@@ -112,11 +121,6 @@ module Puma
|
|
112
121
|
@control_options[:auth_token] = arg
|
113
122
|
end
|
114
123
|
|
115
|
-
o.on "-d", "--daemon", "Daemonize the server into the background" do
|
116
|
-
user_config.daemonize
|
117
|
-
user_config.quiet
|
118
|
-
end
|
119
|
-
|
120
124
|
o.on "--debug", "Log lowlevel debugging information" do
|
121
125
|
user_config.debug
|
122
126
|
end
|
@@ -130,13 +134,19 @@ module Puma
|
|
130
134
|
user_config.environment arg
|
131
135
|
end
|
132
136
|
|
137
|
+
o.on "-f", "--fork-worker=[REQUESTS]", OptionParser::DecimalInteger,
|
138
|
+
"Fork new workers from existing worker. Cluster mode only",
|
139
|
+
"Auto-refork after REQUESTS (default 1000)" do |*args|
|
140
|
+
user_config.fork_worker(*args.compact)
|
141
|
+
end
|
142
|
+
|
133
143
|
o.on "-I", "--include PATH", "Specify $LOAD_PATH directories" do |arg|
|
134
144
|
$LOAD_PATH.unshift(*arg.split(':'))
|
135
145
|
end
|
136
146
|
|
137
147
|
o.on "-p", "--port PORT", "Define the TCP port to bind to",
|
138
148
|
"Use -b for more advanced options" do |arg|
|
139
|
-
user_config.bind "tcp://#{Configuration::
|
149
|
+
user_config.bind "tcp://#{Configuration::DEFAULTS[:tcp_host]}:#{arg}"
|
140
150
|
end
|
141
151
|
|
142
152
|
o.on "--pidfile PATH", "Use PATH as a pidfile" do |arg|
|
@@ -151,6 +161,10 @@ module Puma
|
|
151
161
|
user_config.prune_bundler
|
152
162
|
end
|
153
163
|
|
164
|
+
o.on "--extra-runtime-dependencies GEM1,GEM2", "Defines any extra needed gems when using --prune-bundler" do |arg|
|
165
|
+
user_config.extra_runtime_dependencies arg.split(',')
|
166
|
+
end
|
167
|
+
|
154
168
|
o.on "-q", "--quiet", "Do not log requests internally (default true)" do
|
155
169
|
user_config.quiet
|
156
170
|
end
|
@@ -165,6 +179,10 @@ module Puma
|
|
165
179
|
user_config.restart_command cmd
|
166
180
|
end
|
167
181
|
|
182
|
+
o.on "-s", "--silent", "Do not log prompt messages other than errors" do
|
183
|
+
@log_writer = LogWriter.new(NullIO.new, $stderr)
|
184
|
+
end
|
185
|
+
|
168
186
|
o.on "-S", "--state PATH", "Where to store the state details" do |arg|
|
169
187
|
user_config.state_path arg
|
170
188
|
end
|
@@ -178,10 +196,6 @@ module Puma
|
|
178
196
|
end
|
179
197
|
end
|
180
198
|
|
181
|
-
o.on "--tcp-mode", "Run the app in raw TCP mode instead of HTTP mode" do
|
182
|
-
user_config.tcp_mode!
|
183
|
-
end
|
184
|
-
|
185
199
|
o.on "--early-hints", "Enable early hints support" do
|
186
200
|
user_config.early_hints
|
187
201
|
end
|