gitlab-puma 4.3.1.gitlab.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/History.md +1537 -0
  3. data/LICENSE +26 -0
  4. data/README.md +291 -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 +37 -0
  9. data/docs/deployment.md +111 -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 +38 -0
  15. data/docs/restart.md +41 -0
  16. data/docs/signals.md +96 -0
  17. data/docs/systemd.md +290 -0
  18. data/docs/tcp_mode.md +96 -0
  19. data/ext/puma_http11/PumaHttp11Service.java +19 -0
  20. data/ext/puma_http11/ext_help.h +15 -0
  21. data/ext/puma_http11/extconf.rb +28 -0
  22. data/ext/puma_http11/http11_parser.c +1044 -0
  23. data/ext/puma_http11/http11_parser.h +65 -0
  24. data/ext/puma_http11/http11_parser.java.rl +145 -0
  25. data/ext/puma_http11/http11_parser.rl +147 -0
  26. data/ext/puma_http11/http11_parser_common.rl +54 -0
  27. data/ext/puma_http11/io_buffer.c +155 -0
  28. data/ext/puma_http11/mini_ssl.c +553 -0
  29. data/ext/puma_http11/org/jruby/puma/Http11.java +226 -0
  30. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +455 -0
  31. data/ext/puma_http11/org/jruby/puma/IOBuffer.java +72 -0
  32. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +363 -0
  33. data/ext/puma_http11/puma_http11.c +502 -0
  34. data/lib/puma.rb +31 -0
  35. data/lib/puma/accept_nonblock.rb +29 -0
  36. data/lib/puma/app/status.rb +80 -0
  37. data/lib/puma/binder.rb +385 -0
  38. data/lib/puma/cli.rb +239 -0
  39. data/lib/puma/client.rb +494 -0
  40. data/lib/puma/cluster.rb +554 -0
  41. data/lib/puma/commonlogger.rb +108 -0
  42. data/lib/puma/configuration.rb +362 -0
  43. data/lib/puma/const.rb +242 -0
  44. data/lib/puma/control_cli.rb +289 -0
  45. data/lib/puma/detect.rb +15 -0
  46. data/lib/puma/dsl.rb +740 -0
  47. data/lib/puma/events.rb +156 -0
  48. data/lib/puma/io_buffer.rb +4 -0
  49. data/lib/puma/jruby_restart.rb +84 -0
  50. data/lib/puma/launcher.rb +475 -0
  51. data/lib/puma/minissl.rb +278 -0
  52. data/lib/puma/minissl/context_builder.rb +76 -0
  53. data/lib/puma/null_io.rb +44 -0
  54. data/lib/puma/plugin.rb +120 -0
  55. data/lib/puma/plugin/tmp_restart.rb +36 -0
  56. data/lib/puma/rack/builder.rb +301 -0
  57. data/lib/puma/rack/urlmap.rb +93 -0
  58. data/lib/puma/rack_default.rb +9 -0
  59. data/lib/puma/reactor.rb +400 -0
  60. data/lib/puma/runner.rb +192 -0
  61. data/lib/puma/server.rb +1053 -0
  62. data/lib/puma/single.rb +123 -0
  63. data/lib/puma/state_file.rb +31 -0
  64. data/lib/puma/tcp_logger.rb +41 -0
  65. data/lib/puma/thread_pool.rb +348 -0
  66. data/lib/puma/util.rb +124 -0
  67. data/lib/rack/handler/puma.rb +115 -0
  68. data/tools/docker/Dockerfile +16 -0
  69. data/tools/jungle/README.md +19 -0
  70. data/tools/jungle/init.d/README.md +61 -0
  71. data/tools/jungle/init.d/puma +421 -0
  72. data/tools/jungle/init.d/run-puma +18 -0
  73. data/tools/jungle/rc.d/README.md +74 -0
  74. data/tools/jungle/rc.d/puma +61 -0
  75. data/tools/jungle/rc.d/puma.conf +10 -0
  76. data/tools/jungle/upstart/README.md +61 -0
  77. data/tools/jungle/upstart/puma-manager.conf +31 -0
  78. data/tools/jungle/upstart/puma.conf +69 -0
  79. data/tools/trickletest.rb +44 -0
  80. metadata +147 -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,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 ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitlab-puma
3
+ version: !ruby/object:Gem::Version
4
+ version: 4.3.1.gitlab.2
5
+ platform: ruby
6
+ authors:
7
+ - GitLab
8
+ - Evan Phoenix
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2019-12-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nio4r
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '2.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '2.0'
28
+ description: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
29
+ for Ruby/Rack applications. Puma is intended for use in both development and production
30
+ environments. It's great for highly concurrent Ruby implementations such as Rubinius
31
+ and JRuby as well as as providing process worker support to support CRuby well.
32
+ email:
33
+ - kamil@gitlab.com
34
+ - evan@phx.io
35
+ executables:
36
+ - puma
37
+ - pumactl
38
+ extensions:
39
+ - ext/puma_http11/extconf.rb
40
+ extra_rdoc_files: []
41
+ files:
42
+ - History.md
43
+ - LICENSE
44
+ - README.md
45
+ - bin/puma
46
+ - bin/puma-wild
47
+ - bin/pumactl
48
+ - docs/architecture.md
49
+ - docs/deployment.md
50
+ - docs/images/puma-connection-flow-no-reactor.png
51
+ - docs/images/puma-connection-flow.png
52
+ - docs/images/puma-general-arch.png
53
+ - docs/nginx.md
54
+ - docs/plugins.md
55
+ - docs/restart.md
56
+ - docs/signals.md
57
+ - docs/systemd.md
58
+ - docs/tcp_mode.md
59
+ - ext/puma_http11/PumaHttp11Service.java
60
+ - ext/puma_http11/ext_help.h
61
+ - ext/puma_http11/extconf.rb
62
+ - ext/puma_http11/http11_parser.c
63
+ - ext/puma_http11/http11_parser.h
64
+ - ext/puma_http11/http11_parser.java.rl
65
+ - ext/puma_http11/http11_parser.rl
66
+ - ext/puma_http11/http11_parser_common.rl
67
+ - ext/puma_http11/io_buffer.c
68
+ - ext/puma_http11/mini_ssl.c
69
+ - ext/puma_http11/org/jruby/puma/Http11.java
70
+ - ext/puma_http11/org/jruby/puma/Http11Parser.java
71
+ - ext/puma_http11/org/jruby/puma/IOBuffer.java
72
+ - ext/puma_http11/org/jruby/puma/MiniSSL.java
73
+ - ext/puma_http11/puma_http11.c
74
+ - lib/puma.rb
75
+ - lib/puma/accept_nonblock.rb
76
+ - lib/puma/app/status.rb
77
+ - lib/puma/binder.rb
78
+ - lib/puma/cli.rb
79
+ - lib/puma/client.rb
80
+ - lib/puma/cluster.rb
81
+ - lib/puma/commonlogger.rb
82
+ - lib/puma/configuration.rb
83
+ - lib/puma/const.rb
84
+ - lib/puma/control_cli.rb
85
+ - lib/puma/detect.rb
86
+ - lib/puma/dsl.rb
87
+ - lib/puma/events.rb
88
+ - lib/puma/io_buffer.rb
89
+ - lib/puma/jruby_restart.rb
90
+ - lib/puma/launcher.rb
91
+ - lib/puma/minissl.rb
92
+ - lib/puma/minissl/context_builder.rb
93
+ - lib/puma/null_io.rb
94
+ - lib/puma/plugin.rb
95
+ - lib/puma/plugin/tmp_restart.rb
96
+ - lib/puma/rack/builder.rb
97
+ - lib/puma/rack/urlmap.rb
98
+ - lib/puma/rack_default.rb
99
+ - lib/puma/reactor.rb
100
+ - lib/puma/runner.rb
101
+ - lib/puma/server.rb
102
+ - lib/puma/single.rb
103
+ - lib/puma/state_file.rb
104
+ - lib/puma/tcp_logger.rb
105
+ - lib/puma/thread_pool.rb
106
+ - lib/puma/util.rb
107
+ - lib/rack/handler/puma.rb
108
+ - tools/docker/Dockerfile
109
+ - tools/jungle/README.md
110
+ - tools/jungle/init.d/README.md
111
+ - tools/jungle/init.d/puma
112
+ - tools/jungle/init.d/run-puma
113
+ - tools/jungle/rc.d/README.md
114
+ - tools/jungle/rc.d/puma
115
+ - tools/jungle/rc.d/puma.conf
116
+ - tools/jungle/upstart/README.md
117
+ - tools/jungle/upstart/puma-manager.conf
118
+ - tools/jungle/upstart/puma.conf
119
+ - tools/trickletest.rb
120
+ homepage: https://gitlab.com/gitlab-org/gitlab-puma
121
+ licenses:
122
+ - BSD-3-Clause
123
+ metadata:
124
+ msys2_mingw_dependencies: openssl
125
+ changelog_uri: https://gitlab.com/gitlab-org/gitlab-puma/blob/gitlab-latency/History.md
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '2.2'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">"
138
+ - !ruby/object:Gem::Version
139
+ version: 1.3.1
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.7.6.2
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
146
+ Ruby/Rack applications
147
+ test_files: []