puma 3.8.2 → 3.12.6

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 (67) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +153 -0
  3. data/README.md +140 -230
  4. data/docs/architecture.md +36 -0
  5. data/docs/images/puma-connection-flow-no-reactor.png +0 -0
  6. data/docs/images/puma-connection-flow.png +0 -0
  7. data/docs/images/puma-general-arch.png +0 -0
  8. data/docs/plugins.md +28 -0
  9. data/docs/restart.md +39 -0
  10. data/docs/signals.md +56 -3
  11. data/docs/systemd.md +112 -37
  12. data/ext/puma_http11/http11_parser.c +87 -85
  13. data/ext/puma_http11/http11_parser.rl +12 -10
  14. data/ext/puma_http11/mini_ssl.c +31 -5
  15. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +13 -16
  16. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +15 -2
  17. data/lib/puma/app/status.rb +8 -0
  18. data/lib/puma/binder.rb +22 -17
  19. data/lib/puma/cli.rb +22 -7
  20. data/lib/puma/client.rb +41 -2
  21. data/lib/puma/cluster.rb +28 -7
  22. data/lib/puma/commonlogger.rb +2 -0
  23. data/lib/puma/configuration.rb +21 -14
  24. data/lib/puma/const.rb +17 -2
  25. data/lib/puma/control_cli.rb +16 -14
  26. data/lib/puma/convenient.rb +2 -0
  27. data/lib/puma/daemon_ext.rb +2 -0
  28. data/lib/puma/delegation.rb +2 -0
  29. data/lib/puma/detect.rb +2 -0
  30. data/lib/puma/dsl.rb +46 -9
  31. data/lib/puma/events.rb +3 -2
  32. data/lib/puma/io_buffer.rb +2 -0
  33. data/lib/puma/java_io_buffer.rb +2 -0
  34. data/lib/puma/jruby_restart.rb +2 -1
  35. data/lib/puma/launcher.rb +42 -20
  36. data/lib/puma/minissl.rb +67 -28
  37. data/lib/puma/null_io.rb +2 -0
  38. data/lib/puma/plugin/tmp_restart.rb +0 -1
  39. data/lib/puma/plugin.rb +2 -0
  40. data/lib/puma/rack/builder.rb +2 -1
  41. data/lib/puma/reactor.rb +137 -0
  42. data/lib/puma/runner.rb +16 -3
  43. data/lib/puma/server.rb +145 -29
  44. data/lib/puma/single.rb +14 -3
  45. data/lib/puma/state_file.rb +2 -0
  46. data/lib/puma/tcp_logger.rb +2 -0
  47. data/lib/puma/thread_pool.rb +55 -6
  48. data/lib/puma/util.rb +1 -0
  49. data/lib/puma.rb +8 -0
  50. data/lib/rack/handler/puma.rb +13 -2
  51. data/tools/jungle/README.md +12 -2
  52. data/tools/jungle/init.d/README.md +2 -0
  53. data/tools/jungle/init.d/puma +2 -2
  54. data/tools/jungle/init.d/run-puma +1 -1
  55. data/tools/jungle/rc.d/README.md +74 -0
  56. data/tools/jungle/rc.d/puma +61 -0
  57. data/tools/jungle/rc.d/puma.conf +10 -0
  58. data/tools/trickletest.rb +1 -1
  59. metadata +21 -95
  60. data/.github/issue_template.md +0 -20
  61. data/Gemfile +0 -12
  62. data/Manifest.txt +0 -78
  63. data/Rakefile +0 -158
  64. data/Release.md +0 -9
  65. data/gemfiles/2.1-Gemfile +0 -12
  66. data/puma.gemspec +0 -52
  67. /data/{DEPLOYMENT.md → docs/deployment.md} +0 -0
@@ -1,8 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'thread'
2
4
 
3
5
  module Puma
4
- # A simple thread pool management object.
6
+ # Internal Docs for A simple thread pool management object.
7
+ #
8
+ # Each Puma "worker" has a thread pool to process requests.
9
+ #
10
+ # First a connection to a client is made in `Puma::Server`. It is wrapped in a
11
+ # `Puma::Client` instance and then passed to the `Puma::Reactor` to ensure
12
+ # the whole request is buffered into memory. Once the request is ready, it is passed into
13
+ # a thread pool via the `Puma::ThreadPool#<<` operator where it is stored in a `@todo` array.
5
14
  #
15
+ # Each thread in the pool has an internal loop where it pulls a request from the `@todo` array
16
+ # and proceses it.
6
17
  class ThreadPool
7
18
  class ForceShutdown < RuntimeError
8
19
  end
@@ -49,11 +60,11 @@ module Puma
49
60
  @clean_thread_locals = false
50
61
  end
51
62
 
52
- attr_reader :spawned, :trim_requested
63
+ attr_reader :spawned, :trim_requested, :waiting
53
64
  attr_accessor :clean_thread_locals
54
65
 
55
66
  def self.clean_thread_locals
56
- Thread.current.keys.each do |key|
67
+ Thread.current.keys.each do |key| # rubocop: disable Performance/HashEachMethods
57
68
  Thread.current[key] = nil unless key == :__recursive_key__
58
69
  end
59
70
  end
@@ -64,6 +75,10 @@ module Puma
64
75
  @mutex.synchronize { @todo.size }
65
76
  end
66
77
 
78
+ def pool_capacity
79
+ waiting + (@max - spawned)
80
+ end
81
+
67
82
  # :nodoc:
68
83
  #
69
84
  # Must be called with @mutex held!
@@ -71,9 +86,9 @@ module Puma
71
86
  def spawn_thread
72
87
  @spawned += 1
73
88
 
74
- th = Thread.new do
89
+ th = Thread.new(@spawned) do |spawned|
75
90
  # Thread name is new in Ruby 2.3
76
- Thread.current.name = 'puma %03i' % @spawned if Thread.current.respond_to?(:name=)
91
+ Thread.current.name = 'puma %03i' % spawned if Thread.current.respond_to?(:name=)
77
92
  todo = @todo
78
93
  block = @block
79
94
  mutex = @mutex
@@ -153,9 +168,43 @@ module Puma
153
168
  end
154
169
  end
155
170
 
171
+ # This method is used by `Puma::Server` to let the server know when
172
+ # the thread pool can pull more requests from the socket and
173
+ # pass to the reactor.
174
+ #
175
+ # The general idea is that the thread pool can only work on a fixed
176
+ # number of requests at the same time. If it is already processing that
177
+ # number of requests then it is at capacity. If another Puma process has
178
+ # spare capacity, then the request can be left on the socket so the other
179
+ # worker can pick it up and process it.
180
+ #
181
+ # For example: if there are 5 threads, but only 4 working on
182
+ # requests, this method will not wait and the `Puma::Server`
183
+ # can pull a request right away.
184
+ #
185
+ # If there are 5 threads and all 5 of them are busy, then it will
186
+ # pause here, and wait until the `not_full` condition variable is
187
+ # signaled, usually this indicates that a request has been processed.
188
+ #
189
+ # It's important to note that even though the server might accept another
190
+ # request, it might not be added to the `@todo` array right away.
191
+ # For example if a slow client has only sent a header, but not a body
192
+ # then the `@todo` array would stay the same size as the reactor works
193
+ # to try to buffer the request. In tha scenario the next call to this
194
+ # method would not block and another request would be added into the reactor
195
+ # by the server. This would continue until a fully bufferend request
196
+ # makes it through the reactor and can then be processed by the thread pool.
156
197
  def wait_until_not_full
157
198
  @mutex.synchronize do
158
- until @todo.size - @waiting < @max - @spawned or @shutdown
199
+ while true
200
+ return if @shutdown
201
+
202
+ # If we can still spin up new threads and there
203
+ # is work queued that cannot be handled by waiting
204
+ # threads, then accept more work until we would
205
+ # spin up the max number of threads.
206
+ return if @todo.size - @waiting < @max - @spawned
207
+
159
208
  @not_full.wait @mutex
160
209
  end
161
210
  end
data/lib/puma/util.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  major, minor, patch = RUBY_VERSION.split('.').map { |v| v.to_i }
2
3
 
3
4
  if major == 1 && minor == 9 && patch == 3 && RUBY_PATCHLEVEL < 125
data/lib/puma.rb CHANGED
@@ -12,4 +12,12 @@ module Puma
12
12
  autoload :Const, 'puma/const'
13
13
  autoload :Server, 'puma/server'
14
14
  autoload :Launcher, 'puma/launcher'
15
+
16
+ def self.stats_object=(val)
17
+ @get_stats = val
18
+ end
19
+
20
+ def self.stats
21
+ @get_stats.stats
22
+ end
15
23
  end
@@ -9,6 +9,7 @@ module Rack
9
9
  }
10
10
 
11
11
  def self.config(app, options = {})
12
+ require 'puma'
12
13
  require 'puma/configuration'
13
14
  require 'puma/events'
14
15
  require 'puma/launcher'
@@ -21,7 +22,7 @@ module Rack
21
22
  # contains an array of all explicitly defined user options. We then
22
23
  # know that all other values are defaults
23
24
  if user_supplied_options = options.delete(:user_supplied_options)
24
- (options.keys - user_supplied_options).each do |k, v|
25
+ (options.keys - user_supplied_options).each do |k|
25
26
  default_options[k] = options.delete(k)
26
27
  end
27
28
  end
@@ -42,7 +43,15 @@ module Rack
42
43
  user_config.threads min, max
43
44
  end
44
45
 
45
- self.set_host_port_to_config(options[:Host], options[:Port], user_config)
46
+ if options[:Host] || options[:Port]
47
+ host = options[:Host] || default_options[:Host]
48
+ port = options[:Port] || default_options[:Port]
49
+ self.set_host_port_to_config(host, port, user_config)
50
+ end
51
+
52
+ if default_options[:Host]
53
+ file_config.set_default_host(default_options[:Host])
54
+ end
46
55
  self.set_host_port_to_config(default_options[:Host], default_options[:Port], default_config)
47
56
 
48
57
  user_config.app app
@@ -79,6 +88,8 @@ module Rack
79
88
  end
80
89
  private
81
90
  def self.set_host_port_to_config(host, port, config)
91
+ config.clear_binds! if host || port
92
+
82
93
  if host && (host[0,1] == '.' || host[0,1] == '/')
83
94
  config.bind "unix://#{host}"
84
95
  elsif host && host =~ /^ssl:\/\//
@@ -1,9 +1,19 @@
1
1
  # Puma as a service
2
2
 
3
+ ## Upstart
4
+
5
+ See `/tools/jungle/upstart` for Ubuntu's upstart scripts.
6
+
7
+ ## Systemd
8
+
9
+ See [/docs/systemd](https://github.com/puma/puma/blob/master/docs/systemd.md).
10
+
3
11
  ## Init.d
4
12
 
13
+ Deprecatation Warning : `init.d` was replaced by `systemd` since Debian 8 and Ubuntu 16.04, you should look into [/docs/systemd](https://github.com/puma/puma/blob/master/docs/systemd.md) unless you are on an older OS.
14
+
5
15
  See `/tools/jungle/init.d` for tools to use with init.d and start-stop-daemon.
6
16
 
7
- ## Upstart
17
+ ## rc.d
8
18
 
9
- See `/tools/jungle/upstart` for Ubuntu's upstart scripts.
19
+ See `/tools/jungle/rc.d` for FreeBSD's rc.d scripts
@@ -1,5 +1,7 @@
1
1
  # Puma daemon service
2
2
 
3
+ Deprecatation Warning : `init.d` was replaced by `systemd` since Debian 8 and Ubuntu 16.04, you should look into [/docs/systemd](https://github.com/puma/puma/blob/master/docs/systemd.md) unless you are on an older OS.
4
+
3
5
  Init script to manage multiple Puma servers on the same box using start-stop-daemon.
4
6
 
5
7
  ## Installation
@@ -48,7 +48,7 @@ do_start_one() {
48
48
  if [ -e $PIDFILE ]; then
49
49
  PID=`cat $PIDFILE`
50
50
  # If the puma isn't running, run it, otherwise restart it.
51
- if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
51
+ if ps -p $PID > /dev/null; then
52
52
  do_start_one_do $1
53
53
  else
54
54
  do_restart_one $1
@@ -105,7 +105,7 @@ do_stop_one() {
105
105
  STATEFILE=$1/tmp/puma/state
106
106
  if [ -e $PIDFILE ]; then
107
107
  PID=`cat $PIDFILE`
108
- if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
108
+ if ps -p $PID > /dev/null; then
109
109
  log_daemon_msg "---> Puma $1 isn't running."
110
110
  else
111
111
  log_daemon_msg "---> About to kill PID `cat $PIDFILE`"
@@ -15,4 +15,4 @@ elif [ -f "$HOME/.rvm/scripts/rvm" ]; then
15
15
  fi
16
16
 
17
17
  app=$1; config=$2; log=$3;
18
- cd $app && exec bundle exec puma -C $config 2>&1 >> $log
18
+ cd $app && exec bundle exec puma -C $config >> $log 2>&1
@@ -0,0 +1,74 @@
1
+ # Puma as a service using rc.d
2
+
3
+ Manage multilpe Puma servers as services on one box using FreeBSD's rc.d service.
4
+
5
+ ## Dependencies
6
+
7
+ * `jq` - a command-line json parser is needed to parse the json in the config file
8
+
9
+ ## Installation
10
+
11
+ # Copy the puma script to the rc.d directory (make sure everyone has read/execute perms)
12
+ sudo cp puma /usr/local/etc/rc.d/
13
+
14
+ # Create an empty configuration file
15
+ sudo touch /usr/local/etc/puma.conf
16
+
17
+ # Enable the puma service
18
+ sudo echo 'puma_enable="YES"' >> /etc/rc.conf
19
+
20
+ ## Managing the jungle
21
+
22
+ Puma apps are referenced in /usr/local/etc/puma.conf by default.
23
+
24
+ Start the jungle running:
25
+
26
+ `service puma start`
27
+
28
+ This script will run at boot time.
29
+
30
+
31
+ You can also stop the jungle (stops ALL puma instances) by running:
32
+
33
+ `service puma stop`
34
+
35
+
36
+ To restart the jungle:
37
+
38
+ `service puma restart`
39
+
40
+ ## Conventions
41
+
42
+ * The script expects:
43
+ * a config file to exist under `config/puma.rb` in your app. E.g.: `/home/apps/my-app/config/puma.rb`.
44
+
45
+ You can always change those defaults by editing the scripts.
46
+
47
+ ## Here's what a minimal app's config file should have
48
+
49
+ ```
50
+ {
51
+ "servers" : [
52
+ {
53
+ "dir": "/path/to/rails/project",
54
+ "user": "deploy-user",
55
+ "ruby_version": "ruby.version",
56
+ "ruby_env": "rbenv"
57
+ }
58
+ ]
59
+ }
60
+ ```
61
+
62
+ ## Before starting...
63
+
64
+ You need to customise `puma.conf` to:
65
+
66
+ * Set the right user your app should be running on unless you want root to execute it!
67
+ * Set the directory of the app
68
+ * Set the ruby version to execute
69
+ * Set the ruby environment (currently set to rbenv, since that is the only ruby environment currently supported)
70
+ * Add additional server instances following the scheme in the example
71
+
72
+ ## Notes:
73
+
74
+ Only rbenv is currently supported.
@@ -0,0 +1,61 @@
1
+ #!/bin/sh
2
+ #
3
+
4
+ # PROVIDE: puma
5
+
6
+ . /etc/rc.subr
7
+
8
+ name="puma"
9
+ start_cmd="puma_start"
10
+ stop_cmd="puma_stop"
11
+ restart_cmd="puma_restart"
12
+ rcvar=puma_enable
13
+ required_files=/usr/local/etc/puma.conf
14
+
15
+ puma_start()
16
+ {
17
+ server_count=$(/usr/local/bin/jq ".servers[] .ruby_env" /usr/local/etc/puma.conf | wc -l)
18
+ i=0
19
+ while [ "$i" -lt "$server_count" ]; do
20
+ rb_env=$(/usr/local/bin/jq -r ".servers[$i].ruby_env" /usr/local/etc/puma.conf)
21
+ dir=$(/usr/local/bin/jq -r ".servers[$i].dir" /usr/local/etc/puma.conf)
22
+ user=$(/usr/local/bin/jq -r ".servers[$i].user" /usr/local/etc/puma.conf)
23
+ rb_ver=$(/usr/local/bin/jq -r ".servers[$i].ruby_version" /usr/local/etc/puma.conf)
24
+ case $rb_env in
25
+ "rbenv")
26
+ su - $user -c "cd $dir && rbenv shell $rb_ver && bundle exec puma -C $dir/config/puma.rb -d"
27
+ ;;
28
+ *)
29
+ ;;
30
+ esac
31
+ i=$(( i + 1 ))
32
+ done
33
+ }
34
+
35
+ puma_stop()
36
+ {
37
+ pkill ruby
38
+ }
39
+
40
+ puma_restart()
41
+ {
42
+ server_count=$(/usr/local/bin/jq ".servers[] .ruby_env" /usr/local/etc/puma.conf | wc -l)
43
+ i=0
44
+ while [ "$i" -lt "$server_count" ]; do
45
+ rb_env=$(/usr/local/bin/jq -r ".servers[$i].ruby_env" /usr/local/etc/puma.conf)
46
+ dir=$(/usr/local/bin/jq -r ".servers[$i].dir" /usr/local/etc/puma.conf)
47
+ user=$(/usr/local/bin/jq -r ".servers[$i].user" /usr/local/etc/puma.conf)
48
+ rb_ver=$(/usr/local/bin/jq -r ".servers[$i].ruby_version" /usr/local/etc/puma.conf)
49
+ case $rb_env in
50
+ "rbenv")
51
+ su - $user -c "cd $dir && pkill ruby && rbenv shell $ruby_version && bundle exec puma -C $dir/config/puma.rb -d"
52
+ ;;
53
+ *)
54
+ ;;
55
+ esac
56
+ i=$(( i + 1 ))
57
+ done
58
+ }
59
+
60
+ load_rc_config $name
61
+ run_rc_command "$1"
@@ -0,0 +1,10 @@
1
+ {
2
+ "servers" : [
3
+ {
4
+ "dir": "/path/to/rails/project",
5
+ "user": "deploy-user",
6
+ "ruby_version": "ruby.version",
7
+ "ruby_env": "rbenv"
8
+ }
9
+ ]
10
+ }
data/tools/trickletest.rb CHANGED
@@ -31,7 +31,7 @@ st = "GET / HTTP/1.1\r\nHost: www.zedshaw.com\r\nContent-Type: text/plain\r\nCon
31
31
  puts "length: #{content.length}"
32
32
 
33
33
  threads = []
34
- ARGV[1].to_i.times do
34
+ ARGV[1].to_i.times do
35
35
  t = Thread.new do
36
36
  size = 100
37
37
  puts ">>>> #{size} sized chunks"
metadata CHANGED
@@ -1,81 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.8.2
4
+ version: 3.12.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Phoenix
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-14 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rdoc
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '4.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '4.0'
27
- - !ruby/object:Gem::Dependency
28
- name: rack
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '1.1'
34
- - - "<"
35
- - !ruby/object:Gem::Version
36
- version: '3.0'
37
- type: :development
38
- prerelease: false
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: '1.1'
44
- - - "<"
45
- - !ruby/object:Gem::Version
46
- version: '3.0'
47
- - !ruby/object:Gem::Dependency
48
- name: rake-compiler
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '0.8'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '0.8'
61
- - !ruby/object:Gem::Dependency
62
- name: hoe
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '3.14'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '3.14'
11
+ date: 2020-05-19 00:00:00.000000000 Z
12
+ dependencies: []
75
13
  description: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
76
14
  for Ruby/Rack applications. Puma is intended for use in both development and production
77
- environments. In order to get the best throughput, it is highly recommended that
78
- you use a Ruby implementation with real threads like Rubinius or JRuby.
15
+ environments. It's great for highly concurrent Ruby implementations such as Rubinius
16
+ and JRuby as well as as providing process worker support to support CRuby well.
79
17
  email:
80
18
  - evan@phx.io
81
19
  executables:
@@ -83,33 +21,22 @@ executables:
83
21
  - pumactl
84
22
  extensions:
85
23
  - ext/puma_http11/extconf.rb
86
- extra_rdoc_files:
87
- - ".github/issue_template.md"
88
- - DEPLOYMENT.md
89
- - History.md
90
- - Manifest.txt
91
- - README.md
92
- - Release.md
93
- - docs/nginx.md
94
- - docs/signals.md
95
- - docs/systemd.md
96
- - tools/jungle/README.md
97
- - tools/jungle/init.d/README.md
98
- - tools/jungle/upstart/README.md
24
+ extra_rdoc_files: []
99
25
  files:
100
- - ".github/issue_template.md"
101
- - DEPLOYMENT.md
102
- - Gemfile
103
26
  - History.md
104
27
  - LICENSE
105
- - Manifest.txt
106
28
  - README.md
107
- - Rakefile
108
- - Release.md
109
29
  - bin/puma
110
30
  - bin/puma-wild
111
31
  - bin/pumactl
32
+ - docs/architecture.md
33
+ - docs/deployment.md
34
+ - docs/images/puma-connection-flow-no-reactor.png
35
+ - docs/images/puma-connection-flow.png
36
+ - docs/images/puma-general-arch.png
112
37
  - docs/nginx.md
38
+ - docs/plugins.md
39
+ - docs/restart.md
113
40
  - docs/signals.md
114
41
  - docs/systemd.md
115
42
  - ext/puma_http11/PumaHttp11Service.java
@@ -126,7 +53,6 @@ files:
126
53
  - ext/puma_http11/org/jruby/puma/Http11Parser.java
127
54
  - ext/puma_http11/org/jruby/puma/MiniSSL.java
128
55
  - ext/puma_http11/puma_http11.c
129
- - gemfiles/2.1-Gemfile
130
56
  - lib/puma.rb
131
57
  - lib/puma/accept_nonblock.rb
132
58
  - lib/puma/app/status.rb
@@ -166,11 +92,13 @@ files:
166
92
  - lib/puma/thread_pool.rb
167
93
  - lib/puma/util.rb
168
94
  - lib/rack/handler/puma.rb
169
- - puma.gemspec
170
95
  - tools/jungle/README.md
171
96
  - tools/jungle/init.d/README.md
172
97
  - tools/jungle/init.d/puma
173
98
  - tools/jungle/init.d/run-puma
99
+ - tools/jungle/rc.d/README.md
100
+ - tools/jungle/rc.d/puma
101
+ - tools/jungle/rc.d/puma.conf
174
102
  - tools/jungle/upstart/README.md
175
103
  - tools/jungle/upstart/puma-manager.conf
176
104
  - tools/jungle/upstart/puma.conf
@@ -178,26 +106,24 @@ files:
178
106
  homepage: http://puma.io
179
107
  licenses:
180
108
  - BSD-3-Clause
181
- metadata: {}
109
+ metadata:
110
+ msys2_mingw_dependencies: openssl
182
111
  post_install_message:
183
- rdoc_options:
184
- - "--main"
185
- - README.md
112
+ rdoc_options: []
186
113
  require_paths:
187
114
  - lib
188
115
  required_ruby_version: !ruby/object:Gem::Requirement
189
116
  requirements:
190
117
  - - ">="
191
118
  - !ruby/object:Gem::Version
192
- version: 1.9.3
119
+ version: '2.2'
193
120
  required_rubygems_version: !ruby/object:Gem::Requirement
194
121
  requirements:
195
122
  - - ">="
196
123
  - !ruby/object:Gem::Version
197
124
  version: '0'
198
125
  requirements: []
199
- rubyforge_project:
200
- rubygems_version: 2.5.1
126
+ rubygems_version: 3.0.3
201
127
  signing_key:
202
128
  specification_version: 4
203
129
  summary: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
@@ -1,20 +0,0 @@
1
- ### Steps to reproduce
2
-
3
- 1) ...
4
-
5
- 2) ...
6
-
7
- 3) ...
8
-
9
- ### Expected behavior
10
-
11
- Tell us what should happen ...
12
-
13
- ### Actual behavior
14
-
15
- Tell us what happens instead ...
16
-
17
- ### System configuration
18
-
19
- **Ruby version**:
20
- **Rails version**:
data/Gemfile DELETED
@@ -1,12 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "hoe"
4
- gem "hoe-git"
5
- gem "hoe-ignore"
6
- gem "rdoc"
7
- gem "rake-compiler"
8
-
9
- gem "rack", "< 3.0"
10
- gem "minitest", "~> 5.9"
11
-
12
- gem "jruby-openssl", :platform => "jruby"
data/Manifest.txt DELETED
@@ -1,78 +0,0 @@
1
- .github/issue_template.md
2
- DEPLOYMENT.md
3
- Gemfile
4
- History.md
5
- LICENSE
6
- Manifest.txt
7
- README.md
8
- Rakefile
9
- Release.md
10
- bin/puma
11
- bin/puma-wild
12
- bin/pumactl
13
- docs/nginx.md
14
- docs/signals.md
15
- docs/systemd.md
16
- ext/puma_http11/PumaHttp11Service.java
17
- ext/puma_http11/ext_help.h
18
- ext/puma_http11/extconf.rb
19
- ext/puma_http11/http11_parser.c
20
- ext/puma_http11/http11_parser.h
21
- ext/puma_http11/http11_parser.java.rl
22
- ext/puma_http11/http11_parser.rl
23
- ext/puma_http11/http11_parser_common.rl
24
- ext/puma_http11/io_buffer.c
25
- ext/puma_http11/mini_ssl.c
26
- ext/puma_http11/org/jruby/puma/Http11.java
27
- ext/puma_http11/org/jruby/puma/Http11Parser.java
28
- ext/puma_http11/org/jruby/puma/MiniSSL.java
29
- ext/puma_http11/puma_http11.c
30
- gemfiles/2.1-Gemfile
31
- lib/puma.rb
32
- lib/puma/accept_nonblock.rb
33
- lib/puma/app/status.rb
34
- lib/puma/binder.rb
35
- lib/puma/cli.rb
36
- lib/puma/client.rb
37
- lib/puma/cluster.rb
38
- lib/puma/commonlogger.rb
39
- lib/puma/compat.rb
40
- lib/puma/configuration.rb
41
- lib/puma/const.rb
42
- lib/puma/control_cli.rb
43
- lib/puma/convenient.rb
44
- lib/puma/daemon_ext.rb
45
- lib/puma/delegation.rb
46
- lib/puma/detect.rb
47
- lib/puma/dsl.rb
48
- lib/puma/events.rb
49
- lib/puma/io_buffer.rb
50
- lib/puma/java_io_buffer.rb
51
- lib/puma/jruby_restart.rb
52
- lib/puma/launcher.rb
53
- lib/puma/minissl.rb
54
- lib/puma/null_io.rb
55
- lib/puma/plugin.rb
56
- lib/puma/plugin/tmp_restart.rb
57
- lib/puma/rack/backports/uri/common_193.rb
58
- lib/puma/rack/builder.rb
59
- lib/puma/rack/urlmap.rb
60
- lib/puma/rack_default.rb
61
- lib/puma/reactor.rb
62
- lib/puma/runner.rb
63
- lib/puma/server.rb
64
- lib/puma/single.rb
65
- lib/puma/state_file.rb
66
- lib/puma/tcp_logger.rb
67
- lib/puma/thread_pool.rb
68
- lib/puma/util.rb
69
- lib/rack/handler/puma.rb
70
- puma.gemspec
71
- tools/jungle/README.md
72
- tools/jungle/init.d/README.md
73
- tools/jungle/init.d/puma
74
- tools/jungle/init.d/run-puma
75
- tools/jungle/upstart/README.md
76
- tools/jungle/upstart/puma-manager.conf
77
- tools/jungle/upstart/puma.conf
78
- tools/trickletest.rb