puma 3.8.2 → 4.0.0
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 +5 -5
- data/History.md +157 -0
- data/README.md +155 -225
- data/docs/architecture.md +37 -0
- data/{DEPLOYMENT.md → docs/deployment.md} +24 -4
- 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/plugins.md +28 -0
- data/docs/restart.md +41 -0
- data/docs/signals.md +56 -3
- data/docs/systemd.md +130 -37
- data/ext/puma_http11/PumaHttp11Service.java +2 -0
- data/ext/puma_http11/http11_parser.c +84 -84
- data/ext/puma_http11/http11_parser.rl +9 -9
- data/ext/puma_http11/mini_ssl.c +51 -9
- data/ext/puma_http11/org/jruby/puma/Http11Parser.java +13 -16
- data/ext/puma_http11/org/jruby/puma/IOBuffer.java +72 -0
- data/ext/puma_http11/org/jruby/puma/MiniSSL.java +26 -6
- data/lib/puma.rb +8 -0
- data/lib/puma/app/status.rb +9 -0
- data/lib/puma/binder.rb +31 -18
- data/lib/puma/cli.rb +22 -7
- data/lib/puma/client.rb +67 -18
- data/lib/puma/cluster.rb +64 -19
- data/lib/puma/commonlogger.rb +2 -0
- data/lib/puma/configuration.rb +22 -14
- data/lib/puma/const.rb +13 -2
- data/lib/puma/control_cli.rb +26 -14
- data/lib/puma/convenient.rb +2 -0
- data/lib/puma/daemon_ext.rb +2 -0
- data/lib/puma/delegation.rb +2 -0
- data/lib/puma/detect.rb +2 -0
- data/lib/puma/dsl.rb +91 -12
- data/lib/puma/events.rb +3 -2
- data/lib/puma/io_buffer.rb +3 -6
- data/lib/puma/jruby_restart.rb +2 -1
- data/lib/puma/launcher.rb +51 -30
- data/lib/puma/minissl.rb +79 -28
- data/lib/puma/null_io.rb +2 -0
- data/lib/puma/plugin.rb +2 -0
- data/lib/puma/plugin/tmp_restart.rb +0 -1
- data/lib/puma/rack/builder.rb +2 -1
- data/lib/puma/reactor.rb +218 -30
- data/lib/puma/runner.rb +17 -4
- data/lib/puma/server.rb +113 -49
- data/lib/puma/single.rb +16 -5
- data/lib/puma/state_file.rb +2 -0
- data/lib/puma/tcp_logger.rb +2 -0
- data/lib/puma/thread_pool.rb +59 -6
- data/lib/puma/util.rb +2 -6
- data/lib/rack/handler/puma.rb +13 -2
- data/tools/jungle/README.md +12 -2
- data/tools/jungle/init.d/README.md +2 -0
- data/tools/jungle/init.d/puma +7 -7
- data/tools/jungle/init.d/run-puma +1 -1
- data/tools/jungle/rc.d/README.md +74 -0
- data/tools/jungle/rc.d/puma +61 -0
- data/tools/jungle/rc.d/puma.conf +10 -0
- data/tools/trickletest.rb +1 -1
- metadata +25 -87
- data/.github/issue_template.md +0 -20
- data/Gemfile +0 -12
- data/Manifest.txt +0 -78
- data/Rakefile +0 -158
- data/Release.md +0 -9
- data/gemfiles/2.1-Gemfile +0 -12
- data/lib/puma/compat.rb +0 -14
- data/lib/puma/java_io_buffer.rb +0 -45
- data/lib/puma/rack/backports/uri/common_193.rb +0 -33
- data/puma.gemspec +0 -52
data/lib/puma/tcp_logger.rb
CHANGED
data/lib/puma/thread_pool.rb
CHANGED
@@ -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.
|
5
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.
|
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' %
|
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,47 @@ 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.
|
197
|
+
#
|
198
|
+
# Returns the current number of busy threads, or +nil+ if shutting down.
|
199
|
+
#
|
156
200
|
def wait_until_not_full
|
157
201
|
@mutex.synchronize do
|
158
|
-
|
202
|
+
while true
|
203
|
+
return if @shutdown
|
204
|
+
|
205
|
+
# If we can still spin up new threads and there
|
206
|
+
# is work queued that cannot be handled by waiting
|
207
|
+
# threads, then accept more work until we would
|
208
|
+
# spin up the max number of threads.
|
209
|
+
busy_threads = @spawned - @waiting + @todo.size
|
210
|
+
return busy_threads if @max > busy_threads
|
211
|
+
|
159
212
|
@not_full.wait @mutex
|
160
213
|
end
|
161
214
|
end
|
data/lib/puma/util.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require 'puma/rack/backports/uri/common_193'
|
5
|
-
else
|
6
|
-
require 'uri/common'
|
7
|
-
end
|
3
|
+
require 'uri/common'
|
8
4
|
|
9
5
|
module Puma
|
10
6
|
module Util
|
data/lib/rack/handler/puma.rb
CHANGED
@@ -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
|
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
|
-
|
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:\/\//
|
data/tools/jungle/README.md
CHANGED
@@ -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
|
-
##
|
17
|
+
## rc.d
|
8
18
|
|
9
|
-
See `/tools/jungle/
|
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
|
data/tools/jungle/init.d/puma
CHANGED
@@ -47,11 +47,11 @@ do_start_one() {
|
|
47
47
|
PIDFILE=$1/tmp/puma/pid
|
48
48
|
if [ -e $PIDFILE ]; then
|
49
49
|
PID=`cat $PIDFILE`
|
50
|
-
# If the puma
|
51
|
-
if
|
52
|
-
do_start_one_do $1
|
53
|
-
else
|
50
|
+
# If the puma is running, restart it, otherwise run it.
|
51
|
+
if ps -p $PID > /dev/null; then
|
54
52
|
do_restart_one $1
|
53
|
+
else
|
54
|
+
do_start_one_do $1
|
55
55
|
fi
|
56
56
|
else
|
57
57
|
do_start_one_do $1
|
@@ -105,9 +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
|
109
|
-
log_daemon_msg "---> Puma $1 isn't running."
|
110
|
-
else
|
108
|
+
if ps -p $PID > /dev/null; then
|
111
109
|
log_daemon_msg "---> About to kill PID `cat $PIDFILE`"
|
112
110
|
if [ "$USE_LOCAL_BUNDLE" -eq 1 ]; then
|
113
111
|
cd $1 && bundle exec pumactl --state $STATEFILE stop
|
@@ -116,6 +114,8 @@ do_stop_one() {
|
|
116
114
|
fi
|
117
115
|
# Many daemons don't delete their pidfiles when they exit.
|
118
116
|
rm -f $PIDFILE $STATEFILE
|
117
|
+
else
|
118
|
+
log_daemon_msg "---> Puma $1 isn't running."
|
119
119
|
fi
|
120
120
|
else
|
121
121
|
log_daemon_msg "---> No puma here..."
|
@@ -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"
|
data/tools/trickletest.rb
CHANGED
metadata
CHANGED
@@ -1,81 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Phoenix
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: nio4r
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
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'
|
26
|
+
version: '2.0'
|
75
27
|
description: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
|
76
28
|
for Ruby/Rack applications. Puma is intended for use in both development and production
|
77
|
-
environments.
|
78
|
-
|
29
|
+
environments. It's great for highly concurrent Ruby implementations such as Rubinius
|
30
|
+
and JRuby as well as as providing process worker support to support CRuby well.
|
79
31
|
email:
|
80
32
|
- evan@phx.io
|
81
33
|
executables:
|
@@ -83,33 +35,22 @@ executables:
|
|
83
35
|
- pumactl
|
84
36
|
extensions:
|
85
37
|
- 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
|
38
|
+
extra_rdoc_files: []
|
99
39
|
files:
|
100
|
-
- ".github/issue_template.md"
|
101
|
-
- DEPLOYMENT.md
|
102
|
-
- Gemfile
|
103
40
|
- History.md
|
104
41
|
- LICENSE
|
105
|
-
- Manifest.txt
|
106
42
|
- README.md
|
107
|
-
- Rakefile
|
108
|
-
- Release.md
|
109
43
|
- bin/puma
|
110
44
|
- bin/puma-wild
|
111
45
|
- bin/pumactl
|
46
|
+
- docs/architecture.md
|
47
|
+
- docs/deployment.md
|
48
|
+
- docs/images/puma-connection-flow-no-reactor.png
|
49
|
+
- docs/images/puma-connection-flow.png
|
50
|
+
- docs/images/puma-general-arch.png
|
112
51
|
- docs/nginx.md
|
52
|
+
- docs/plugins.md
|
53
|
+
- docs/restart.md
|
113
54
|
- docs/signals.md
|
114
55
|
- docs/systemd.md
|
115
56
|
- ext/puma_http11/PumaHttp11Service.java
|
@@ -124,9 +65,9 @@ files:
|
|
124
65
|
- ext/puma_http11/mini_ssl.c
|
125
66
|
- ext/puma_http11/org/jruby/puma/Http11.java
|
126
67
|
- ext/puma_http11/org/jruby/puma/Http11Parser.java
|
68
|
+
- ext/puma_http11/org/jruby/puma/IOBuffer.java
|
127
69
|
- ext/puma_http11/org/jruby/puma/MiniSSL.java
|
128
70
|
- ext/puma_http11/puma_http11.c
|
129
|
-
- gemfiles/2.1-Gemfile
|
130
71
|
- lib/puma.rb
|
131
72
|
- lib/puma/accept_nonblock.rb
|
132
73
|
- lib/puma/app/status.rb
|
@@ -135,7 +76,6 @@ files:
|
|
135
76
|
- lib/puma/client.rb
|
136
77
|
- lib/puma/cluster.rb
|
137
78
|
- lib/puma/commonlogger.rb
|
138
|
-
- lib/puma/compat.rb
|
139
79
|
- lib/puma/configuration.rb
|
140
80
|
- lib/puma/const.rb
|
141
81
|
- lib/puma/control_cli.rb
|
@@ -146,14 +86,12 @@ files:
|
|
146
86
|
- lib/puma/dsl.rb
|
147
87
|
- lib/puma/events.rb
|
148
88
|
- lib/puma/io_buffer.rb
|
149
|
-
- lib/puma/java_io_buffer.rb
|
150
89
|
- lib/puma/jruby_restart.rb
|
151
90
|
- lib/puma/launcher.rb
|
152
91
|
- lib/puma/minissl.rb
|
153
92
|
- lib/puma/null_io.rb
|
154
93
|
- lib/puma/plugin.rb
|
155
94
|
- lib/puma/plugin/tmp_restart.rb
|
156
|
-
- lib/puma/rack/backports/uri/common_193.rb
|
157
95
|
- lib/puma/rack/builder.rb
|
158
96
|
- lib/puma/rack/urlmap.rb
|
159
97
|
- lib/puma/rack_default.rb
|
@@ -166,11 +104,13 @@ files:
|
|
166
104
|
- lib/puma/thread_pool.rb
|
167
105
|
- lib/puma/util.rb
|
168
106
|
- lib/rack/handler/puma.rb
|
169
|
-
- puma.gemspec
|
170
107
|
- tools/jungle/README.md
|
171
108
|
- tools/jungle/init.d/README.md
|
172
109
|
- tools/jungle/init.d/puma
|
173
110
|
- tools/jungle/init.d/run-puma
|
111
|
+
- tools/jungle/rc.d/README.md
|
112
|
+
- tools/jungle/rc.d/puma
|
113
|
+
- tools/jungle/rc.d/puma.conf
|
174
114
|
- tools/jungle/upstart/README.md
|
175
115
|
- tools/jungle/upstart/puma-manager.conf
|
176
116
|
- tools/jungle/upstart/puma.conf
|
@@ -178,26 +118,24 @@ files:
|
|
178
118
|
homepage: http://puma.io
|
179
119
|
licenses:
|
180
120
|
- BSD-3-Clause
|
181
|
-
metadata:
|
121
|
+
metadata:
|
122
|
+
msys2_mingw_dependencies: openssl
|
182
123
|
post_install_message:
|
183
|
-
rdoc_options:
|
184
|
-
- "--main"
|
185
|
-
- README.md
|
124
|
+
rdoc_options: []
|
186
125
|
require_paths:
|
187
126
|
- lib
|
188
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
189
128
|
requirements:
|
190
129
|
- - ">="
|
191
130
|
- !ruby/object:Gem::Version
|
192
|
-
version:
|
131
|
+
version: '2.2'
|
193
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
133
|
requirements:
|
195
134
|
- - ">="
|
196
135
|
- !ruby/object:Gem::Version
|
197
136
|
version: '0'
|
198
137
|
requirements: []
|
199
|
-
|
200
|
-
rubygems_version: 2.5.1
|
138
|
+
rubygems_version: 3.0.3
|
201
139
|
signing_key:
|
202
140
|
specification_version: 4
|
203
141
|
summary: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
|