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.

Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +1717 -432
  3. data/LICENSE +23 -20
  4. data/README.md +190 -64
  5. data/bin/puma-wild +3 -9
  6. data/docs/architecture.md +59 -21
  7. data/docs/compile_options.md +55 -0
  8. data/docs/deployment.md +69 -58
  9. data/docs/fork_worker.md +31 -0
  10. data/docs/images/puma-connection-flow-no-reactor.png +0 -0
  11. data/docs/images/puma-connection-flow.png +0 -0
  12. data/docs/images/puma-general-arch.png +0 -0
  13. data/docs/jungle/README.md +9 -0
  14. data/{tools → docs}/jungle/rc.d/README.md +1 -1
  15. data/{tools → docs}/jungle/rc.d/puma +2 -2
  16. data/{tools → docs}/jungle/rc.d/puma.conf +0 -0
  17. data/docs/kubernetes.md +66 -0
  18. data/docs/nginx.md +2 -2
  19. data/docs/plugins.md +22 -12
  20. data/docs/rails_dev_mode.md +28 -0
  21. data/docs/restart.md +47 -22
  22. data/docs/signals.md +13 -11
  23. data/docs/stats.md +142 -0
  24. data/docs/systemd.md +95 -120
  25. data/docs/testing_benchmarks_local_files.md +150 -0
  26. data/docs/testing_test_rackup_ci_files.md +36 -0
  27. data/ext/puma_http11/PumaHttp11Service.java +2 -2
  28. data/ext/puma_http11/ext_help.h +1 -1
  29. data/ext/puma_http11/extconf.rb +61 -3
  30. data/ext/puma_http11/http11_parser.c +106 -118
  31. data/ext/puma_http11/http11_parser.h +2 -2
  32. data/ext/puma_http11/http11_parser.java.rl +22 -38
  33. data/ext/puma_http11/http11_parser.rl +6 -4
  34. data/ext/puma_http11/http11_parser_common.rl +6 -6
  35. data/ext/puma_http11/mini_ssl.c +376 -93
  36. data/ext/puma_http11/no_ssl/PumaHttp11Service.java +15 -0
  37. data/ext/puma_http11/org/jruby/puma/Http11.java +108 -116
  38. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +84 -99
  39. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +250 -88
  40. data/ext/puma_http11/puma_http11.c +49 -57
  41. data/lib/puma/app/status.rb +71 -49
  42. data/lib/puma/binder.rb +243 -148
  43. data/lib/puma/cli.rb +50 -36
  44. data/lib/puma/client.rb +373 -233
  45. data/lib/puma/cluster/worker.rb +175 -0
  46. data/lib/puma/cluster/worker_handle.rb +97 -0
  47. data/lib/puma/cluster.rb +268 -235
  48. data/lib/puma/commonlogger.rb +4 -2
  49. data/lib/puma/configuration.rb +116 -88
  50. data/lib/puma/const.rb +49 -30
  51. data/lib/puma/control_cli.rb +123 -76
  52. data/lib/puma/detect.rb +33 -2
  53. data/lib/puma/dsl.rb +685 -135
  54. data/lib/puma/error_logger.rb +112 -0
  55. data/lib/puma/events.rb +17 -111
  56. data/lib/puma/io_buffer.rb +44 -5
  57. data/lib/puma/jruby_restart.rb +4 -59
  58. data/lib/puma/json_serialization.rb +96 -0
  59. data/lib/puma/launcher/bundle_pruner.rb +104 -0
  60. data/lib/puma/launcher.rb +196 -130
  61. data/lib/puma/log_writer.rb +137 -0
  62. data/lib/puma/minissl/context_builder.rb +92 -0
  63. data/lib/puma/minissl.rb +249 -69
  64. data/lib/puma/null_io.rb +20 -1
  65. data/lib/puma/plugin/tmp_restart.rb +3 -1
  66. data/lib/puma/plugin.rb +9 -13
  67. data/lib/puma/rack/builder.rb +8 -9
  68. data/lib/puma/rack/urlmap.rb +2 -0
  69. data/lib/puma/rack_default.rb +3 -1
  70. data/lib/puma/reactor.rb +90 -187
  71. data/lib/puma/request.rb +644 -0
  72. data/lib/puma/runner.rb +94 -71
  73. data/lib/puma/server.rb +337 -715
  74. data/lib/puma/single.rb +27 -72
  75. data/lib/puma/state_file.rb +46 -7
  76. data/lib/puma/systemd.rb +47 -0
  77. data/lib/puma/thread_pool.rb +184 -93
  78. data/lib/puma/util.rb +23 -10
  79. data/lib/puma.rb +60 -3
  80. data/lib/rack/handler/puma.rb +17 -15
  81. data/tools/Dockerfile +16 -0
  82. data/tools/trickletest.rb +0 -1
  83. metadata +53 -33
  84. data/ext/puma_http11/io_buffer.c +0 -155
  85. data/lib/puma/accept_nonblock.rb +0 -23
  86. data/lib/puma/compat.rb +0 -14
  87. data/lib/puma/convenient.rb +0 -23
  88. data/lib/puma/daemon_ext.rb +0 -31
  89. data/lib/puma/delegation.rb +0 -11
  90. data/lib/puma/java_io_buffer.rb +0 -45
  91. data/lib/puma/rack/backports/uri/common_193.rb +0 -33
  92. data/lib/puma/tcp_logger.rb +0 -39
  93. data/tools/jungle/README.md +0 -19
  94. data/tools/jungle/init.d/README.md +0 -61
  95. data/tools/jungle/init.d/puma +0 -421
  96. data/tools/jungle/init.d/run-puma +0 -18
  97. data/tools/jungle/upstart/README.md +0 -61
  98. data/tools/jungle/upstart/puma-manager.conf +0 -31
  99. 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
- require 'puma'
5
- require 'puma/configuration'
6
- require 'puma/launcher'
7
- require 'puma/const'
8
- require 'puma/events'
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 its Puma::Configuration object here to allow
13
- # apps to pick it up. An app needs to use it conditionally though
14
- # since it is not set if the app is launched via another
15
- # mechanism than the CLI class.
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
- # +stdout+ and +stderr+ can be set to IO-like objects which
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
- private
78
+ private
82
79
  def unsupported(str)
83
- @events.error(str)
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
- o.on "--control URL", "The bind url to use for the control server",
102
- "Use 'auto' to use temp unix server" do |arg|
103
- if arg
104
- @control_url = arg
105
- elsif Puma.jruby?
106
- unsupported "No default url available on JRuby"
107
- end
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::DefaultTCPHost}:#{arg}"
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