puma 2.2.0 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/History.md +3334 -0
  3. data/LICENSE +23 -20
  4. data/README.md +387 -100
  5. data/bin/puma-wild +25 -0
  6. data/bin/pumactl +1 -1
  7. data/docs/5.0-Upgrade.md +98 -0
  8. data/docs/6.0-Upgrade.md +56 -0
  9. data/docs/7.0-Upgrade.md +52 -0
  10. data/docs/8.0-Upgrade.md +100 -0
  11. data/docs/architecture.md +74 -0
  12. data/docs/compile_options.md +55 -0
  13. data/docs/deployment.md +137 -0
  14. data/docs/fork_worker.md +41 -0
  15. data/docs/grpc.md +62 -0
  16. data/docs/images/favicon.svg +1 -0
  17. data/docs/images/puma-connection-flow-no-reactor.png +0 -0
  18. data/docs/images/puma-connection-flow.png +0 -0
  19. data/docs/images/puma-general-arch.png +0 -0
  20. data/docs/images/running-puma.svg +1 -0
  21. data/docs/images/standard-logo.svg +1 -0
  22. data/docs/java_options.md +54 -0
  23. data/docs/jungle/README.md +9 -0
  24. data/docs/jungle/rc.d/README.md +74 -0
  25. data/docs/jungle/rc.d/puma +61 -0
  26. data/docs/jungle/rc.d/puma.conf +10 -0
  27. data/docs/kubernetes.md +73 -0
  28. data/docs/nginx.md +5 -5
  29. data/docs/plugins.md +42 -0
  30. data/docs/rails_dev_mode.md +28 -0
  31. data/docs/restart.md +65 -0
  32. data/docs/signals.md +98 -0
  33. data/docs/stats.md +148 -0
  34. data/docs/systemd.md +253 -0
  35. data/docs/testing_benchmarks_local_files.md +150 -0
  36. data/docs/testing_test_rackup_ci_files.md +36 -0
  37. data/ext/puma_http11/PumaHttp11Service.java +2 -2
  38. data/ext/puma_http11/extconf.rb +59 -2
  39. data/ext/puma_http11/http11_parser.c +319 -487
  40. data/ext/puma_http11/http11_parser.h +15 -13
  41. data/ext/puma_http11/http11_parser.java.rl +64 -94
  42. data/ext/puma_http11/http11_parser.rl +27 -24
  43. data/ext/puma_http11/http11_parser_common.rl +8 -8
  44. data/ext/puma_http11/mini_ssl.c +696 -38
  45. data/ext/puma_http11/no_ssl/PumaHttp11Service.java +15 -0
  46. data/ext/puma_http11/org/jruby/puma/EnvKey.java +241 -0
  47. data/ext/puma_http11/org/jruby/puma/Http11.java +241 -145
  48. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +174 -221
  49. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +413 -193
  50. data/ext/puma_http11/puma_http11.c +183 -175
  51. data/lib/puma/app/status.rb +77 -29
  52. data/lib/puma/binder.rb +349 -119
  53. data/lib/puma/cli.rb +163 -801
  54. data/lib/puma/client.rb +627 -144
  55. data/lib/puma/client_env.rb +171 -0
  56. data/lib/puma/cluster/worker.rb +183 -0
  57. data/lib/puma/cluster/worker_handle.rb +127 -0
  58. data/lib/puma/cluster.rb +634 -0
  59. data/lib/puma/cluster_accept_loop_delay.rb +91 -0
  60. data/lib/puma/commonlogger.rb +115 -0
  61. data/lib/puma/configuration.rb +420 -198
  62. data/lib/puma/const.rb +266 -115
  63. data/lib/puma/control_cli.rb +219 -120
  64. data/lib/puma/detect.rb +56 -2
  65. data/lib/puma/dsl.rb +1562 -0
  66. data/lib/puma/error_logger.rb +115 -0
  67. data/lib/puma/events.rb +44 -60
  68. data/lib/puma/io_buffer.rb +48 -5
  69. data/lib/puma/jruby_restart.rb +2 -51
  70. data/lib/puma/json_serialization.rb +96 -0
  71. data/lib/puma/launcher/bundle_pruner.rb +102 -0
  72. data/lib/puma/launcher.rb +501 -0
  73. data/lib/puma/log_writer.rb +153 -0
  74. data/lib/puma/minissl/context_builder.rb +96 -0
  75. data/lib/puma/minissl.rb +355 -37
  76. data/lib/puma/null_io.rb +79 -12
  77. data/lib/puma/plugin/systemd.rb +90 -0
  78. data/lib/puma/plugin/tmp_restart.rb +36 -0
  79. data/lib/puma/plugin.rb +111 -0
  80. data/lib/puma/rack/builder.rb +297 -0
  81. data/lib/puma/rack/urlmap.rb +93 -0
  82. data/lib/puma/rack_default.rb +21 -4
  83. data/lib/puma/reactor.rb +102 -133
  84. data/lib/puma/response.rb +532 -0
  85. data/lib/puma/runner.rb +211 -0
  86. data/lib/puma/sd_notify.rb +146 -0
  87. data/lib/puma/server.rb +582 -445
  88. data/lib/puma/server_plugin_control.rb +32 -0
  89. data/lib/puma/single.rb +72 -0
  90. data/lib/puma/state_file.rb +69 -0
  91. data/lib/puma/thread_pool.rb +389 -57
  92. data/lib/puma/util.rb +125 -0
  93. data/lib/puma.rb +80 -6
  94. data/lib/rack/handler/puma.rb +125 -47
  95. data/tools/Dockerfile +26 -0
  96. data/tools/trickletest.rb +44 -0
  97. metadata +88 -148
  98. data/COPYING +0 -55
  99. data/Gemfile +0 -10
  100. data/History.txt +0 -302
  101. data/Manifest.txt +0 -60
  102. data/Rakefile +0 -165
  103. data/TODO +0 -5
  104. data/docs/config.md +0 -0
  105. data/ext/puma_http11/ext_help.h +0 -15
  106. data/ext/puma_http11/io_buffer.c +0 -154
  107. data/lib/puma/accept_nonblock.rb +0 -23
  108. data/lib/puma/capistrano.rb +0 -34
  109. data/lib/puma/compat.rb +0 -11
  110. data/lib/puma/daemon_ext.rb +0 -20
  111. data/lib/puma/delegation.rb +0 -11
  112. data/lib/puma/java_io_buffer.rb +0 -45
  113. data/lib/puma/rack_patch.rb +0 -25
  114. data/puma.gemspec +0 -45
  115. data/test/test_app_status.rb +0 -88
  116. data/test/test_cli.rb +0 -171
  117. data/test/test_config.rb +0 -16
  118. data/test/test_http10.rb +0 -27
  119. data/test/test_http11.rb +0 -126
  120. data/test/test_integration.rb +0 -154
  121. data/test/test_iobuffer.rb +0 -38
  122. data/test/test_minissl.rb +0 -25
  123. data/test/test_null_io.rb +0 -31
  124. data/test/test_persistent.rb +0 -238
  125. data/test/test_puma_server.rb +0 -224
  126. data/test/test_rack_handler.rb +0 -10
  127. data/test/test_rack_server.rb +0 -141
  128. data/test/test_thread_pool.rb +0 -146
  129. data/test/test_unix_socket.rb +0 -39
  130. data/test/test_ws.rb +0 -89
  131. data/tools/jungle/init.d/README.md +0 -54
  132. data/tools/jungle/init.d/puma +0 -332
  133. data/tools/jungle/init.d/run-puma +0 -3
  134. data/tools/jungle/upstart/README.md +0 -61
  135. data/tools/jungle/upstart/puma-manager.conf +0 -31
  136. data/tools/jungle/upstart/puma.conf +0 -52
data/lib/puma.rb CHANGED
@@ -1,14 +1,88 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Standard libraries
2
4
  require 'socket'
3
5
  require 'tempfile'
4
- require 'yaml'
5
- require 'time'
6
- require 'etc'
7
6
  require 'uri'
8
7
  require 'stringio'
9
8
 
10
9
  require 'thread'
11
10
 
12
- # Ruby Puma
13
- require 'puma/const'
14
- require 'puma/server'
11
+ # use require, see https://github.com/puma/puma/pull/2381
12
+ require 'puma/puma_http11'
13
+
14
+ require_relative 'puma/detect'
15
+ require_relative 'puma/json_serialization'
16
+
17
+ module Puma
18
+ # when Puma is loaded via `Puma::CLI`, all files are loaded via
19
+ # `require_relative`. The below are for non-standard loading
20
+ autoload :Const, "#{__dir__}/puma/const"
21
+ autoload :Server, "#{__dir__}/puma/server"
22
+ autoload :Launcher, "#{__dir__}/puma/launcher"
23
+ autoload :LogWriter, "#{__dir__}/puma/log_writer"
24
+
25
+ # at present, MiniSSL::Engine is only defined in extension code (puma_http11),
26
+ # not in minissl.rb
27
+ HAS_SSL = const_defined?(:MiniSSL, false) && MiniSSL.const_defined?(:Engine, false)
28
+
29
+ HAS_UNIX_SOCKET = Object.const_defined?(:UNIXSocket) && !IS_WINDOWS
30
+
31
+ if HAS_SSL
32
+ require_relative 'puma/minissl'
33
+ else
34
+ module MiniSSL
35
+ # this class is defined so that it exists when Puma is compiled
36
+ # without ssl support, as Server and Reactor use it in rescue statements.
37
+ class SSLError < StandardError ; end
38
+ end
39
+ end
40
+
41
+ def self.ssl?
42
+ HAS_SSL
43
+ end
44
+
45
+ def self.abstract_unix_socket?
46
+ @abstract_unix ||=
47
+ if HAS_UNIX_SOCKET
48
+ begin
49
+ ::UNIXServer.new("\0puma.temp.unix").close
50
+ true
51
+ rescue ArgumentError # darwin
52
+ false
53
+ end
54
+ else
55
+ false
56
+ end
57
+ end
58
+
59
+ # @!attribute [rw] stats_object=
60
+ def self.stats_object=(val)
61
+ @get_stats = val
62
+ end
63
+
64
+ # @!attribute [rw] stats_object
65
+ def self.stats
66
+ Puma::JSONSerialization.generate @get_stats.stats
67
+ end
68
+
69
+ # @!attribute [r] stats_hash
70
+ # @version 5.0.0
71
+ def self.stats_hash
72
+ @get_stats.stats
73
+ end
74
+
75
+ def self.set_thread_name(name)
76
+ Thread.current.name = "puma #{name}"
77
+ end
78
+
79
+ # Shows deprecated warning for renamed methods.
80
+ # @example
81
+ # Puma.deprecate_method_change :on_booted, __callee__, __method__
82
+ #
83
+ def self.deprecate_method_change(method_old, method_caller, method_new)
84
+ if method_old == method_caller
85
+ warn "Use '#{method_new}', '#{method_caller}' is deprecated and will be removed in v8"
86
+ end
87
+ end
88
+ end
@@ -1,66 +1,144 @@
1
- require 'rack/handler'
2
- require 'puma'
3
-
4
- module Rack
5
- module Handler
6
- module Puma
7
- DEFAULT_OPTIONS = {
8
- :Host => '0.0.0.0',
9
- :Port => 8080,
10
- :Threads => '0:16',
11
- :Verbose => false
12
- }
1
+ # frozen_string_literal: true
2
+
3
+ module Puma
4
+
5
+ # This module is used as an 'include' file in code at bottom of file. It loads
6
+ # into either `Rackup::Handler::Puma` or `Rack::Handler::Puma`.
7
+
8
+ module RackHandler
9
+ DEFAULT_OPTIONS = {
10
+ :Verbose => false,
11
+ :Silent => false
12
+ }
13
+
14
+ def config(app, options = {})
15
+ require_relative '../../puma'
16
+ require_relative '../../puma/configuration'
17
+ require_relative '../../puma/log_writer'
18
+ require_relative '../../puma/launcher'
19
+
20
+ default_options = DEFAULT_OPTIONS.dup
21
+
22
+ # Libraries pass in values such as :Port and there is no way to determine
23
+ # if it is a default provided by the library or a special value provided
24
+ # by the user. A special key `user_supplied_options` can be passed. This
25
+ # contains an array of all explicitly defined user options. We then
26
+ # know that all other values are defaults
27
+ if user_supplied_options = options.delete(:user_supplied_options)
28
+ (options.keys - user_supplied_options).each do |k|
29
+ default_options[k] = options.delete(k)
30
+ end
31
+ end
13
32
 
14
- def self.run(app, options = {})
15
- options = DEFAULT_OPTIONS.merge(options)
33
+ @events = options[:events] || ::Puma::Events.new
16
34
 
17
- if options[:Verbose]
18
- app = Rack::CommonLogger.new(app, STDOUT)
35
+ conf = ::Puma::Configuration.new(options, default_options.merge({ events: @events })) do |user_config, file_config, default_config|
36
+ if options.delete(:Verbose)
37
+ begin
38
+ require 'rack/commonlogger' # Rack 1.x
39
+ rescue LoadError
40
+ require 'rack/common_logger' # Rack 2 and later
41
+ end
42
+ app = ::Rack::CommonLogger.new(app, STDOUT)
19
43
  end
20
44
 
21
45
  if options[:environment]
22
- ENV['RACK_ENV'] = options[:environment].to_s
46
+ user_config.environment options[:environment]
23
47
  end
24
48
 
25
- server = ::Puma::Server.new(app)
26
- min, max = options[:Threads].split(':', 2)
27
-
28
- puts "Puma #{::Puma::Const::PUMA_VERSION} starting..."
29
- puts "* Min threads: #{min}, max threads: #{max}"
30
- puts "* Environment: #{ENV['RACK_ENV']}"
31
- puts "* Listening on tcp://#{options[:Host]}:#{options[:Port]}"
32
-
33
- server.add_tcp_listener options[:Host], options[:Port]
34
- server.min_threads = Integer(min)
35
- server.max_threads = Integer(max)
36
- yield server if block_given?
37
-
38
- begin
39
- server.run.join
40
- rescue Interrupt
41
- puts "* Gracefully stopping, waiting for requests to finish"
42
- server.stop(true)
43
- puts "* Goodbye!"
49
+ if options[:Threads]
50
+ min, max = options.delete(:Threads).split(':', 2)
51
+ user_config.threads min, max
44
52
  end
45
53
 
54
+ if options[:Host] || options[:Port]
55
+ host = options[:Host] || default_options[:Host]
56
+ port = options[:Port] || default_options[:Port]
57
+ self.set_host_port_to_config(host, port, user_config)
58
+ end
59
+
60
+ if default_options[:Host]
61
+ file_config.set_default_host(default_options[:Host])
62
+ end
63
+ self.set_host_port_to_config(default_options[:Host], default_options[:Port], default_config)
64
+
65
+ user_config.app app
46
66
  end
67
+ conf
68
+ end
69
+
70
+ def run(app, **options)
71
+ conf = self.config(app, options)
72
+
73
+ log_writer = options.delete(:Silent) ? ::Puma::LogWriter.strings : ::Puma::LogWriter.stdio
74
+
75
+ launcher = ::Puma::Launcher.new(conf, log_writer: log_writer, events: @events)
47
76
 
48
- def self.valid_options
49
- {
50
- "Host=HOST" => "Hostname to listen on (default: localhost)",
51
- "Port=PORT" => "Port to listen on (default: 8080)",
52
- "Threads=MIN:MAX" => "min:max threads to use (default 0:16)",
53
- "Quiet" => "Don't report each request"
54
- }
77
+ yield launcher if block_given?
78
+ begin
79
+ launcher.run
80
+ rescue Interrupt
81
+ puts "* Gracefully stopping, waiting for requests to finish"
82
+ launcher.stop
83
+ puts "* Goodbye!"
55
84
  end
56
85
  end
57
86
 
58
- register :puma, Puma
87
+ def valid_options
88
+ {
89
+ "Host=HOST" => "Hostname to listen on (default: localhost)",
90
+ "Port=PORT" => "Port to listen on (default: 8080)",
91
+ "Threads=MIN:MAX" => "min:max threads to use (default 0:16)",
92
+ "Verbose" => "Don't report each request (default: false)"
93
+ }
94
+ end
95
+
96
+ def set_host_port_to_config(host, port, config)
97
+ config.clear_binds! if host || port
98
+
99
+ if host&.start_with? '.', '/', '@'
100
+ config.bind "unix://#{host}"
101
+ elsif host&.start_with? 'ssl://'
102
+ uri = URI.parse(host)
103
+ uri.port ||= port || ::Puma::Configuration::DEFAULTS[:tcp_port]
104
+ config.bind uri.to_s
105
+ else
106
+
107
+ if host
108
+ port ||= ::Puma::Configuration::DEFAULTS[:tcp_port]
109
+ end
110
+
111
+ if port
112
+ host ||= ::Puma::Configuration.default_tcp_host
113
+ config.port port, host
114
+ end
115
+ end
116
+ end
59
117
  end
60
118
  end
61
119
 
62
- # This is to trick newrelic into enabling the agent automatically.
63
- module Mongrel
64
- class HttpServer
120
+ # rackup was removed in Rack 3, it is now a separate gem
121
+ if Object.const_defined?(:Rackup) && ::Rackup.const_defined?(:Handler)
122
+ module Rackup
123
+ module Handler
124
+ module Puma
125
+ class << self
126
+ include ::Puma::RackHandler
127
+ end
128
+ end
129
+ register :puma, Puma
130
+ end
131
+ end
132
+ else
133
+ do_register = Object.const_defined?(:Rack) && ::Rack.release < '3'
134
+ module Rack
135
+ module Handler
136
+ module Puma
137
+ class << self
138
+ include ::Puma::RackHandler
139
+ end
140
+ end
141
+ end
65
142
  end
143
+ ::Rack::Handler.register(:puma, ::Rack::Handler::Puma) if do_register
66
144
  end
data/tools/Dockerfile ADDED
@@ -0,0 +1,26 @@
1
+ # Use this Dockerfile to create minimal reproductions of issues
2
+ # Build (MRI): docker build -f tools/Dockerfile .
3
+ # Build (JRuby): docker build -f tools/Dockerfile --build-arg RUBY_IMAGE=jruby:9.4 .
4
+
5
+ ARG RUBY_IMAGE=ruby:latest
6
+ FROM ${RUBY_IMAGE}
7
+
8
+ # Set BUNDLE_FROZEN=false if you need to update Gemfile.lock during a build.
9
+ ARG BUNDLE_FROZEN=true
10
+
11
+ RUN apt-get update \
12
+ && apt-get install -y --no-install-recommends ragel procps git \
13
+ && rm -rf /var/lib/apt/lists/*
14
+
15
+ # Only freeze Bundler and compile native extensions when using MRI.
16
+ RUN if [ "$(ruby -e 'print RUBY_ENGINE')" = "ruby" ] && [ "${BUNDLE_FROZEN}" = "true" ]; then bundle config --global frozen 1; fi
17
+
18
+ WORKDIR /usr/src/app
19
+
20
+ COPY . .
21
+
22
+ RUN bundle install
23
+ RUN if [ "$(ruby -e 'print RUBY_ENGINE')" = "ruby" ]; then bundle exec rake compile; fi
24
+
25
+ EXPOSE 9292
26
+ CMD ["bundle", "exec", "bin/puma", "test/rackup/hello.ru"]
@@ -0,0 +1,44 @@
1
+ require 'socket'
2
+ require 'stringio'
3
+
4
+ def do_test(st, chunk)
5
+ s = TCPSocket.new('127.0.0.1',ARGV[0].to_i);
6
+ req = StringIO.new(st)
7
+ nout = 0
8
+ randstop = rand(st.length / 10)
9
+ STDERR.puts "stopping after: #{randstop}"
10
+
11
+ begin
12
+ while data = req.read(chunk)
13
+ nout += s.write(data)
14
+ s.flush
15
+ sleep 0.1
16
+ if nout > randstop
17
+ STDERR.puts "BANG! after #{nout} bytes."
18
+ break
19
+ end
20
+ end
21
+ rescue Object => e
22
+ STDERR.puts "ERROR: #{e}"
23
+ ensure
24
+ s.close
25
+ end
26
+ end
27
+
28
+ content = "-" * (1024 * 240)
29
+ st = "GET / HTTP/1.1\r\nHost: www.zedshaw.com\r\nContent-Type: text/plain\r\nContent-Length: #{content.length}\r\n\r\n#{content}"
30
+
31
+ puts "length: #{content.length}"
32
+
33
+ threads = []
34
+ ARGV[1].to_i.times do
35
+ t = Thread.new do
36
+ size = 100
37
+ puts ">>>> #{size} sized chunks"
38
+ do_test(st, size)
39
+ end
40
+
41
+ threads << t
42
+ end
43
+
44
+ threads.each {|t| t.join}
metadata CHANGED
@@ -1,90 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
5
- prerelease:
4
+ version: 8.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Evan Phoenix
9
- autorequire:
10
8
  bindir: bin
11
9
  cert_chain: []
12
- date: 2013-07-02 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
13
11
  dependencies:
14
12
  - !ruby/object:Gem::Dependency
15
- name: rack
13
+ name: nio4r
16
14
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
15
  requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '1.1'
22
- - - <
16
+ - - "~>"
23
17
  - !ruby/object:Gem::Version
24
18
  version: '2.0'
25
19
  type: :runtime
26
20
  prerelease: false
27
21
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
22
  requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '1.1'
33
- - - <
23
+ - - "~>"
34
24
  - !ruby/object:Gem::Version
35
25
  version: '2.0'
36
- - !ruby/object:Gem::Dependency
37
- name: rdoc
38
- requirement: !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- version: '4.0'
44
- type: :development
45
- prerelease: false
46
- version_requirements: !ruby/object:Gem::Requirement
47
- none: false
48
- requirements:
49
- - - ~>
50
- - !ruby/object:Gem::Version
51
- version: '4.0'
52
- - !ruby/object:Gem::Dependency
53
- name: rake-compiler
54
- requirement: !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ~>
58
- - !ruby/object:Gem::Version
59
- version: 0.8.0
60
- type: :development
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- none: false
64
- requirements:
65
- - - ~>
66
- - !ruby/object:Gem::Version
67
- version: 0.8.0
68
- - !ruby/object:Gem::Dependency
69
- name: hoe
70
- requirement: !ruby/object:Gem::Requirement
71
- none: false
72
- requirements:
73
- - - ~>
74
- - !ruby/object:Gem::Version
75
- version: '3.6'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- none: false
80
- requirements:
81
- - - ~>
82
- - !ruby/object:Gem::Version
83
- version: '3.6'
84
- description: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
85
- for Ruby/Rack applications. Puma is intended for use in both development and production
86
- environments. In order to get the best throughput, it is highly recommended that
87
- you use a Ruby implementation with real threads like Rubinius or JRuby.
26
+ description: |
27
+ Puma is a simple, fast, multi-threaded, and highly parallel HTTP 1.1 server
28
+ for Ruby/Rack applications. Puma is intended for use in both development and
29
+ production environments. It's great for highly parallel Ruby implementations such as
30
+ JRuby and TruffleRuby as well as as providing process worker support to support CRuby well.
88
31
  email:
89
32
  - evan@phx.io
90
33
  executables:
@@ -92,132 +35,129 @@ executables:
92
35
  - pumactl
93
36
  extensions:
94
37
  - ext/puma_http11/extconf.rb
95
- extra_rdoc_files:
96
- - History.txt
97
- - Manifest.txt
98
- - README.md
99
- - docs/config.md
100
- - docs/nginx.md
101
- - tools/jungle/init.d/README.md
102
- - tools/jungle/upstart/README.md
38
+ extra_rdoc_files: []
103
39
  files:
104
- - COPYING
105
- - Gemfile
106
- - History.txt
40
+ - History.md
107
41
  - LICENSE
108
- - Manifest.txt
109
42
  - README.md
110
- - Rakefile
111
- - TODO
112
43
  - bin/puma
44
+ - bin/puma-wild
113
45
  - bin/pumactl
114
- - docs/config.md
46
+ - docs/5.0-Upgrade.md
47
+ - docs/6.0-Upgrade.md
48
+ - docs/7.0-Upgrade.md
49
+ - docs/8.0-Upgrade.md
50
+ - docs/architecture.md
51
+ - docs/compile_options.md
52
+ - docs/deployment.md
53
+ - docs/fork_worker.md
54
+ - docs/grpc.md
55
+ - docs/images/favicon.svg
56
+ - docs/images/puma-connection-flow-no-reactor.png
57
+ - docs/images/puma-connection-flow.png
58
+ - docs/images/puma-general-arch.png
59
+ - docs/images/running-puma.svg
60
+ - docs/images/standard-logo.svg
61
+ - docs/java_options.md
62
+ - docs/jungle/README.md
63
+ - docs/jungle/rc.d/README.md
64
+ - docs/jungle/rc.d/puma
65
+ - docs/jungle/rc.d/puma.conf
66
+ - docs/kubernetes.md
115
67
  - docs/nginx.md
68
+ - docs/plugins.md
69
+ - docs/rails_dev_mode.md
70
+ - docs/restart.md
71
+ - docs/signals.md
72
+ - docs/stats.md
73
+ - docs/systemd.md
74
+ - docs/testing_benchmarks_local_files.md
75
+ - docs/testing_test_rackup_ci_files.md
116
76
  - ext/puma_http11/PumaHttp11Service.java
117
- - ext/puma_http11/ext_help.h
118
77
  - ext/puma_http11/extconf.rb
119
78
  - ext/puma_http11/http11_parser.c
120
79
  - ext/puma_http11/http11_parser.h
121
80
  - ext/puma_http11/http11_parser.java.rl
122
81
  - ext/puma_http11/http11_parser.rl
123
82
  - ext/puma_http11/http11_parser_common.rl
124
- - ext/puma_http11/io_buffer.c
125
83
  - ext/puma_http11/mini_ssl.c
84
+ - ext/puma_http11/no_ssl/PumaHttp11Service.java
85
+ - ext/puma_http11/org/jruby/puma/EnvKey.java
126
86
  - ext/puma_http11/org/jruby/puma/Http11.java
127
87
  - ext/puma_http11/org/jruby/puma/Http11Parser.java
128
88
  - ext/puma_http11/org/jruby/puma/MiniSSL.java
129
89
  - ext/puma_http11/puma_http11.c
130
90
  - lib/puma.rb
131
- - lib/puma/accept_nonblock.rb
132
91
  - lib/puma/app/status.rb
133
92
  - lib/puma/binder.rb
134
- - lib/puma/capistrano.rb
135
93
  - lib/puma/cli.rb
136
94
  - lib/puma/client.rb
137
- - lib/puma/compat.rb
95
+ - lib/puma/client_env.rb
96
+ - lib/puma/cluster.rb
97
+ - lib/puma/cluster/worker.rb
98
+ - lib/puma/cluster/worker_handle.rb
99
+ - lib/puma/cluster_accept_loop_delay.rb
100
+ - lib/puma/commonlogger.rb
138
101
  - lib/puma/configuration.rb
139
102
  - lib/puma/const.rb
140
103
  - lib/puma/control_cli.rb
141
- - lib/puma/daemon_ext.rb
142
- - lib/puma/delegation.rb
143
104
  - lib/puma/detect.rb
105
+ - lib/puma/dsl.rb
106
+ - lib/puma/error_logger.rb
144
107
  - lib/puma/events.rb
145
108
  - lib/puma/io_buffer.rb
146
- - lib/puma/java_io_buffer.rb
147
109
  - lib/puma/jruby_restart.rb
110
+ - lib/puma/json_serialization.rb
111
+ - lib/puma/launcher.rb
112
+ - lib/puma/launcher/bundle_pruner.rb
113
+ - lib/puma/log_writer.rb
148
114
  - lib/puma/minissl.rb
115
+ - lib/puma/minissl/context_builder.rb
149
116
  - lib/puma/null_io.rb
117
+ - lib/puma/plugin.rb
118
+ - lib/puma/plugin/systemd.rb
119
+ - lib/puma/plugin/tmp_restart.rb
120
+ - lib/puma/rack/builder.rb
121
+ - lib/puma/rack/urlmap.rb
150
122
  - lib/puma/rack_default.rb
151
- - lib/puma/rack_patch.rb
152
123
  - lib/puma/reactor.rb
124
+ - lib/puma/response.rb
125
+ - lib/puma/runner.rb
126
+ - lib/puma/sd_notify.rb
153
127
  - lib/puma/server.rb
128
+ - lib/puma/server_plugin_control.rb
129
+ - lib/puma/single.rb
130
+ - lib/puma/state_file.rb
154
131
  - lib/puma/thread_pool.rb
155
132
  - lib/puma/util.rb
156
133
  - lib/rack/handler/puma.rb
157
- - puma.gemspec
158
- - tools/jungle/init.d/README.md
159
- - tools/jungle/init.d/puma
160
- - tools/jungle/init.d/run-puma
161
- - tools/jungle/upstart/README.md
162
- - tools/jungle/upstart/puma-manager.conf
163
- - tools/jungle/upstart/puma.conf
164
- - test/test_app_status.rb
165
- - test/test_cli.rb
166
- - test/test_config.rb
167
- - test/test_http10.rb
168
- - test/test_http11.rb
169
- - test/test_integration.rb
170
- - test/test_iobuffer.rb
171
- - test/test_minissl.rb
172
- - test/test_null_io.rb
173
- - test/test_persistent.rb
174
- - test/test_puma_server.rb
175
- - test/test_rack_handler.rb
176
- - test/test_rack_server.rb
177
- - test/test_thread_pool.rb
178
- - test/test_unix_socket.rb
179
- - test/test_ws.rb
180
- homepage: http://puma.io
181
- licenses: []
182
- post_install_message:
183
- rdoc_options:
184
- - --main
185
- - README.md
134
+ - tools/Dockerfile
135
+ - tools/trickletest.rb
136
+ homepage: https://puma.io
137
+ licenses:
138
+ - BSD-3-Clause
139
+ metadata:
140
+ bug_tracker_uri: https://github.com/puma/puma/issues
141
+ changelog_uri: https://github.com/puma/puma/blob/main/History.md
142
+ homepage_uri: https://puma.io
143
+ source_code_uri: https://github.com/puma/puma
144
+ rubygems_mfa_required: 'true'
145
+ msys2_mingw_dependencies: openssl
146
+ rdoc_options: []
186
147
  require_paths:
187
148
  - lib
188
149
  required_ruby_version: !ruby/object:Gem::Requirement
189
- none: false
190
150
  requirements:
191
- - - ! '>='
151
+ - - ">="
192
152
  - !ruby/object:Gem::Version
193
- version: 1.8.7
153
+ version: '3.0'
194
154
  required_rubygems_version: !ruby/object:Gem::Requirement
195
- none: false
196
155
  requirements:
197
- - - ! '>='
156
+ - - ">="
198
157
  - !ruby/object:Gem::Version
199
158
  version: '0'
200
159
  requirements: []
201
- rubyforge_project: puma
202
- rubygems_version: 1.8.25
203
- signing_key:
204
- specification_version: 3
205
- summary: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
206
- Ruby/Rack applications
207
- test_files:
208
- - test/test_app_status.rb
209
- - test/test_cli.rb
210
- - test/test_config.rb
211
- - test/test_http10.rb
212
- - test/test_http11.rb
213
- - test/test_integration.rb
214
- - test/test_iobuffer.rb
215
- - test/test_minissl.rb
216
- - test/test_null_io.rb
217
- - test/test_persistent.rb
218
- - test/test_puma_server.rb
219
- - test/test_rack_handler.rb
220
- - test/test_rack_server.rb
221
- - test/test_thread_pool.rb
222
- - test/test_unix_socket.rb
223
- - test/test_ws.rb
160
+ rubygems_version: 4.0.6
161
+ specification_version: 4
162
+ summary: A Ruby/Rack web server built for parallelism.
163
+ test_files: []