piesync-puma 3.12.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/History.md +1429 -0
  3. data/LICENSE +26 -0
  4. data/README.md +280 -0
  5. data/bin/puma +10 -0
  6. data/bin/puma-wild +31 -0
  7. data/bin/pumactl +12 -0
  8. data/docs/architecture.md +36 -0
  9. data/docs/deployment.md +91 -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/nginx.md +80 -0
  14. data/docs/plugins.md +28 -0
  15. data/docs/restart.md +39 -0
  16. data/docs/signals.md +96 -0
  17. data/docs/systemd.md +272 -0
  18. data/ext/puma_http11/PumaHttp11Service.java +17 -0
  19. data/ext/puma_http11/ext_help.h +15 -0
  20. data/ext/puma_http11/extconf.rb +15 -0
  21. data/ext/puma_http11/http11_parser.c +1071 -0
  22. data/ext/puma_http11/http11_parser.h +65 -0
  23. data/ext/puma_http11/http11_parser.java.rl +161 -0
  24. data/ext/puma_http11/http11_parser.rl +149 -0
  25. data/ext/puma_http11/http11_parser_common.rl +54 -0
  26. data/ext/puma_http11/io_buffer.c +155 -0
  27. data/ext/puma_http11/mini_ssl.c +494 -0
  28. data/ext/puma_http11/org/jruby/puma/Http11.java +234 -0
  29. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +470 -0
  30. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +352 -0
  31. data/ext/puma_http11/puma_http11.c +500 -0
  32. data/lib/puma.rb +23 -0
  33. data/lib/puma/accept_nonblock.rb +23 -0
  34. data/lib/puma/app/status.rb +74 -0
  35. data/lib/puma/binder.rb +413 -0
  36. data/lib/puma/cli.rb +235 -0
  37. data/lib/puma/client.rb +480 -0
  38. data/lib/puma/cluster.rb +531 -0
  39. data/lib/puma/commonlogger.rb +108 -0
  40. data/lib/puma/compat.rb +14 -0
  41. data/lib/puma/configuration.rb +361 -0
  42. data/lib/puma/const.rb +239 -0
  43. data/lib/puma/control_cli.rb +264 -0
  44. data/lib/puma/convenient.rb +25 -0
  45. data/lib/puma/daemon_ext.rb +33 -0
  46. data/lib/puma/delegation.rb +13 -0
  47. data/lib/puma/detect.rb +15 -0
  48. data/lib/puma/dsl.rb +518 -0
  49. data/lib/puma/events.rb +153 -0
  50. data/lib/puma/io_buffer.rb +9 -0
  51. data/lib/puma/java_io_buffer.rb +47 -0
  52. data/lib/puma/jruby_restart.rb +84 -0
  53. data/lib/puma/launcher.rb +433 -0
  54. data/lib/puma/minissl.rb +285 -0
  55. data/lib/puma/null_io.rb +44 -0
  56. data/lib/puma/plugin.rb +117 -0
  57. data/lib/puma/plugin/tmp_restart.rb +34 -0
  58. data/lib/puma/rack/backports/uri/common_193.rb +33 -0
  59. data/lib/puma/rack/builder.rb +299 -0
  60. data/lib/puma/rack/urlmap.rb +91 -0
  61. data/lib/puma/rack_default.rb +7 -0
  62. data/lib/puma/reactor.rb +347 -0
  63. data/lib/puma/runner.rb +184 -0
  64. data/lib/puma/server.rb +1072 -0
  65. data/lib/puma/single.rb +123 -0
  66. data/lib/puma/state_file.rb +31 -0
  67. data/lib/puma/tcp_logger.rb +41 -0
  68. data/lib/puma/thread_pool.rb +346 -0
  69. data/lib/puma/util.rb +129 -0
  70. data/lib/rack/handler/puma.rb +115 -0
  71. data/tools/jungle/README.md +19 -0
  72. data/tools/jungle/init.d/README.md +61 -0
  73. data/tools/jungle/init.d/puma +421 -0
  74. data/tools/jungle/init.d/run-puma +18 -0
  75. data/tools/jungle/rc.d/README.md +74 -0
  76. data/tools/jungle/rc.d/puma +61 -0
  77. data/tools/jungle/rc.d/puma.conf +10 -0
  78. data/tools/jungle/upstart/README.md +61 -0
  79. data/tools/jungle/upstart/puma-manager.conf +31 -0
  80. data/tools/jungle/upstart/puma.conf +69 -0
  81. data/tools/trickletest.rb +45 -0
  82. metadata +131 -0
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+
3
+ # on system boot, and root have no rbenv installed,
4
+ # after start-stop-daemon switched to current user, we have to init rbenv
5
+ if [ -d "$HOME/.rbenv/bin" ]; then
6
+ PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
7
+ eval "$(rbenv init -)"
8
+ elif [ -d "/usr/local/rbenv/bin" ]; then
9
+ PATH="/usr/local/rbenv/bin:/usr/local/rbenv/shims:$PATH"
10
+ eval "$(rbenv init -)"
11
+ elif [ -f /usr/local/rvm/scripts/rvm ]; then
12
+ source /etc/profile.d/rvm.sh
13
+ elif [ -f "$HOME/.rvm/scripts/rvm" ]; then
14
+ source "$HOME/.rvm/scripts/rvm"
15
+ fi
16
+
17
+ app=$1; config=$2; log=$3;
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
+ }
@@ -0,0 +1,61 @@
1
+ # Puma as a service using Upstart
2
+
3
+ Manage multiple Puma servers as services on the same box using Ubuntu upstart.
4
+
5
+ ## Installation
6
+
7
+ # Copy the scripts to services directory
8
+ sudo cp puma.conf puma-manager.conf /etc/init
9
+
10
+ # Create an empty configuration file
11
+ sudo touch /etc/puma.conf
12
+
13
+ ## Managing the jungle
14
+
15
+ Puma apps are referenced in /etc/puma.conf by default. Add each app's path as a new line, e.g.:
16
+
17
+ ```
18
+ /home/apps/my-cool-ruby-app
19
+ /home/apps/another-app/current
20
+ ```
21
+
22
+ Start the jungle running:
23
+
24
+ `sudo start puma-manager`
25
+
26
+ This script will run at boot time.
27
+
28
+ Start a single puma like this:
29
+
30
+ `sudo start puma app=/path/to/app`
31
+
32
+ ## Logs
33
+
34
+ Everything is logged by upstart, defaulting to `/var/log/upstart`.
35
+
36
+ Each puma instance is named after its directory, so for an app called `/home/apps/my-app` the log file would be `/var/log/upstart/puma-_home_apps_my-app.log`.
37
+
38
+ ## Conventions
39
+
40
+ * The script expects:
41
+ * a config file to exist under `config/puma.rb` in your app. E.g.: `/home/apps/my-app/config/puma.rb`.
42
+ * a temporary folder to put the PID, socket and state files to exist called `tmp/puma`. E.g.: `/home/apps/my-app/tmp/puma`. Puma will take care of the files for you.
43
+
44
+ You can always change those defaults by editing the scripts.
45
+
46
+ ## Here's what a minimal app's config file should have
47
+
48
+ ```
49
+ pidfile "/path/to/app/tmp/puma/pid"
50
+ state_path "/path/to/app/tmp/puma/state"
51
+ activate_control_app
52
+ ```
53
+
54
+ ## Before starting...
55
+
56
+ You need to customise `puma.conf` to:
57
+
58
+ * Set the right user your app should be running on unless you want root to execute it!
59
+ * Look for `setuid apps` and `setgid apps`, uncomment those lines and replace `apps` to whatever your deployment user is.
60
+ * Replace `apps` on the paths (or set the right paths to your user's home) everywhere else.
61
+ * Uncomment the source lines for `rbenv` or `rvm` support unless you use a system wide installation of Ruby.
@@ -0,0 +1,31 @@
1
+ # /etc/init/puma-manager.conf - manage a set of Pumas
2
+
3
+ # This example config should work with Ubuntu 12.04+. It
4
+ # allows you to manage multiple Puma instances with
5
+ # Upstart, Ubuntu's native service management tool.
6
+ #
7
+ # See puma.conf for how to manage a single Puma instance.
8
+ #
9
+ # Use "stop puma-manager" to stop all Puma instances.
10
+ # Use "start puma-manager" to start all instances.
11
+ # Use "restart puma-manager" to restart all instances.
12
+ # Crazy, right?
13
+ #
14
+
15
+ description "Manages the set of puma processes"
16
+
17
+ # This starts upon bootup and stops on shutdown
18
+ start on runlevel [2345]
19
+ stop on runlevel [06]
20
+
21
+ # Set this to the number of Puma processes you want
22
+ # to run on this machine
23
+ env PUMA_CONF="/etc/puma.conf"
24
+
25
+ pre-start script
26
+ for i in `cat $PUMA_CONF`; do
27
+ app=`echo $i | cut -d , -f 1`
28
+ logger -t "puma-manager" "Starting $app"
29
+ start puma app=$app
30
+ done
31
+ end script
@@ -0,0 +1,69 @@
1
+ # /etc/init/puma.conf - Puma config
2
+
3
+ # This example config should work with Ubuntu 12.04+. It
4
+ # allows you to manage multiple Puma instances with
5
+ # Upstart, Ubuntu's native service management tool.
6
+ #
7
+ # See puma-manager.conf for how to manage all Puma instances at once.
8
+ #
9
+ # Save this config as /etc/init/puma.conf then manage puma with:
10
+ # sudo start puma app=PATH_TO_APP
11
+ # sudo stop puma app=PATH_TO_APP
12
+ # sudo status puma app=PATH_TO_APP
13
+ #
14
+ # or use the service command:
15
+ # sudo service puma {start,stop,restart,status}
16
+ #
17
+
18
+ description "Puma Background Worker"
19
+
20
+ # no "start on", we don't want to automatically start
21
+ stop on (stopping puma-manager or runlevel [06])
22
+
23
+ # change apps to match your deployment user if you want to use this as a less privileged user (recommended!)
24
+ setuid apps
25
+ setgid apps
26
+
27
+ respawn
28
+ respawn limit 3 30
29
+
30
+ instance ${app}
31
+
32
+ script
33
+ # this script runs in /bin/sh by default
34
+ # respawn as bash so we can source in rbenv/rvm
35
+ # quoted heredoc to tell /bin/sh not to interpret
36
+ # variables
37
+
38
+ # source ENV variables manually as Upstart doesn't, eg:
39
+ #. /etc/environment
40
+
41
+ exec /bin/bash <<'EOT'
42
+ # set HOME to the setuid user's home, there doesn't seem to be a better, portable way
43
+ export HOME="$(eval echo ~$(id -un))"
44
+
45
+ if [ -d "/usr/local/rbenv/bin" ]; then
46
+ export PATH="/usr/local/rbenv/bin:/usr/local/rbenv/shims:$PATH"
47
+ elif [ -d "$HOME/.rbenv/bin" ]; then
48
+ export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
49
+ elif [ -f /etc/profile.d/rvm.sh ]; then
50
+ source /etc/profile.d/rvm.sh
51
+ elif [ -f /usr/local/rvm/scripts/rvm ]; then
52
+ source /etc/profile.d/rvm.sh
53
+ elif [ -f "$HOME/.rvm/scripts/rvm" ]; then
54
+ source "$HOME/.rvm/scripts/rvm"
55
+ elif [ -f /usr/local/share/chruby/chruby.sh ]; then
56
+ source /usr/local/share/chruby/chruby.sh
57
+ if [ -f /usr/local/share/chruby/auto.sh ]; then
58
+ source /usr/local/share/chruby/auto.sh
59
+ fi
60
+ # if you aren't using auto, set your version here
61
+ # chruby 2.0.0
62
+ fi
63
+
64
+ cd $app
65
+ logger -t puma "Starting server: $app"
66
+
67
+ exec bundle exec puma -C config/puma.rb
68
+ EOT
69
+ end script
@@ -0,0 +1,45 @@
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
+ t.abort_on_exception = true
42
+ threads << t
43
+ end
44
+
45
+ threads.each {|t| t.join}
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: piesync-puma
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.12.6
5
+ platform: ruby
6
+ authors:
7
+ - Evan Phoenix
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-23 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
14
+ for Ruby/Rack applications. Puma is intended for use in both development and production
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.
17
+ email:
18
+ - evan@phx.io
19
+ executables:
20
+ - puma
21
+ - pumactl
22
+ extensions:
23
+ - ext/puma_http11/extconf.rb
24
+ extra_rdoc_files: []
25
+ files:
26
+ - History.md
27
+ - LICENSE
28
+ - README.md
29
+ - bin/puma
30
+ - bin/puma-wild
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
37
+ - docs/nginx.md
38
+ - docs/plugins.md
39
+ - docs/restart.md
40
+ - docs/signals.md
41
+ - docs/systemd.md
42
+ - ext/puma_http11/PumaHttp11Service.java
43
+ - ext/puma_http11/ext_help.h
44
+ - ext/puma_http11/extconf.rb
45
+ - ext/puma_http11/http11_parser.c
46
+ - ext/puma_http11/http11_parser.h
47
+ - ext/puma_http11/http11_parser.java.rl
48
+ - ext/puma_http11/http11_parser.rl
49
+ - ext/puma_http11/http11_parser_common.rl
50
+ - ext/puma_http11/io_buffer.c
51
+ - ext/puma_http11/mini_ssl.c
52
+ - ext/puma_http11/org/jruby/puma/Http11.java
53
+ - ext/puma_http11/org/jruby/puma/Http11Parser.java
54
+ - ext/puma_http11/org/jruby/puma/MiniSSL.java
55
+ - ext/puma_http11/puma_http11.c
56
+ - lib/puma.rb
57
+ - lib/puma/accept_nonblock.rb
58
+ - lib/puma/app/status.rb
59
+ - lib/puma/binder.rb
60
+ - lib/puma/cli.rb
61
+ - lib/puma/client.rb
62
+ - lib/puma/cluster.rb
63
+ - lib/puma/commonlogger.rb
64
+ - lib/puma/compat.rb
65
+ - lib/puma/configuration.rb
66
+ - lib/puma/const.rb
67
+ - lib/puma/control_cli.rb
68
+ - lib/puma/convenient.rb
69
+ - lib/puma/daemon_ext.rb
70
+ - lib/puma/delegation.rb
71
+ - lib/puma/detect.rb
72
+ - lib/puma/dsl.rb
73
+ - lib/puma/events.rb
74
+ - lib/puma/io_buffer.rb
75
+ - lib/puma/java_io_buffer.rb
76
+ - lib/puma/jruby_restart.rb
77
+ - lib/puma/launcher.rb
78
+ - lib/puma/minissl.rb
79
+ - lib/puma/null_io.rb
80
+ - lib/puma/plugin.rb
81
+ - lib/puma/plugin/tmp_restart.rb
82
+ - lib/puma/rack/backports/uri/common_193.rb
83
+ - lib/puma/rack/builder.rb
84
+ - lib/puma/rack/urlmap.rb
85
+ - lib/puma/rack_default.rb
86
+ - lib/puma/reactor.rb
87
+ - lib/puma/runner.rb
88
+ - lib/puma/server.rb
89
+ - lib/puma/single.rb
90
+ - lib/puma/state_file.rb
91
+ - lib/puma/tcp_logger.rb
92
+ - lib/puma/thread_pool.rb
93
+ - lib/puma/util.rb
94
+ - lib/rack/handler/puma.rb
95
+ - tools/jungle/README.md
96
+ - tools/jungle/init.d/README.md
97
+ - tools/jungle/init.d/puma
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
102
+ - tools/jungle/upstart/README.md
103
+ - tools/jungle/upstart/puma-manager.conf
104
+ - tools/jungle/upstart/puma.conf
105
+ - tools/trickletest.rb
106
+ homepage: http://puma.io
107
+ licenses:
108
+ - BSD-3-Clause
109
+ metadata:
110
+ msys2_mingw_dependencies: openssl
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '2.2'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubygems_version: 3.1.4
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
130
+ Ruby/Rack applications
131
+ test_files: []