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.

Files changed (71) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +157 -0
  3. data/README.md +155 -225
  4. data/docs/architecture.md +37 -0
  5. data/{DEPLOYMENT.md → docs/deployment.md} +24 -4
  6. data/docs/images/puma-connection-flow-no-reactor.png +0 -0
  7. data/docs/images/puma-connection-flow.png +0 -0
  8. data/docs/images/puma-general-arch.png +0 -0
  9. data/docs/plugins.md +28 -0
  10. data/docs/restart.md +41 -0
  11. data/docs/signals.md +56 -3
  12. data/docs/systemd.md +130 -37
  13. data/ext/puma_http11/PumaHttp11Service.java +2 -0
  14. data/ext/puma_http11/http11_parser.c +84 -84
  15. data/ext/puma_http11/http11_parser.rl +9 -9
  16. data/ext/puma_http11/mini_ssl.c +51 -9
  17. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +13 -16
  18. data/ext/puma_http11/org/jruby/puma/IOBuffer.java +72 -0
  19. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +26 -6
  20. data/lib/puma.rb +8 -0
  21. data/lib/puma/app/status.rb +9 -0
  22. data/lib/puma/binder.rb +31 -18
  23. data/lib/puma/cli.rb +22 -7
  24. data/lib/puma/client.rb +67 -18
  25. data/lib/puma/cluster.rb +64 -19
  26. data/lib/puma/commonlogger.rb +2 -0
  27. data/lib/puma/configuration.rb +22 -14
  28. data/lib/puma/const.rb +13 -2
  29. data/lib/puma/control_cli.rb +26 -14
  30. data/lib/puma/convenient.rb +2 -0
  31. data/lib/puma/daemon_ext.rb +2 -0
  32. data/lib/puma/delegation.rb +2 -0
  33. data/lib/puma/detect.rb +2 -0
  34. data/lib/puma/dsl.rb +91 -12
  35. data/lib/puma/events.rb +3 -2
  36. data/lib/puma/io_buffer.rb +3 -6
  37. data/lib/puma/jruby_restart.rb +2 -1
  38. data/lib/puma/launcher.rb +51 -30
  39. data/lib/puma/minissl.rb +79 -28
  40. data/lib/puma/null_io.rb +2 -0
  41. data/lib/puma/plugin.rb +2 -0
  42. data/lib/puma/plugin/tmp_restart.rb +0 -1
  43. data/lib/puma/rack/builder.rb +2 -1
  44. data/lib/puma/reactor.rb +218 -30
  45. data/lib/puma/runner.rb +17 -4
  46. data/lib/puma/server.rb +113 -49
  47. data/lib/puma/single.rb +16 -5
  48. data/lib/puma/state_file.rb +2 -0
  49. data/lib/puma/tcp_logger.rb +2 -0
  50. data/lib/puma/thread_pool.rb +59 -6
  51. data/lib/puma/util.rb +2 -6
  52. data/lib/rack/handler/puma.rb +13 -2
  53. data/tools/jungle/README.md +12 -2
  54. data/tools/jungle/init.d/README.md +2 -0
  55. data/tools/jungle/init.d/puma +7 -7
  56. data/tools/jungle/init.d/run-puma +1 -1
  57. data/tools/jungle/rc.d/README.md +74 -0
  58. data/tools/jungle/rc.d/puma +61 -0
  59. data/tools/jungle/rc.d/puma.conf +10 -0
  60. data/tools/trickletest.rb +1 -1
  61. metadata +25 -87
  62. data/.github/issue_template.md +0 -20
  63. data/Gemfile +0 -12
  64. data/Manifest.txt +0 -78
  65. data/Rakefile +0 -158
  66. data/Release.md +0 -9
  67. data/gemfiles/2.1-Gemfile +0 -12
  68. data/lib/puma/compat.rb +0 -14
  69. data/lib/puma/java_io_buffer.rb +0 -45
  70. data/lib/puma/rack/backports/uri/common_193.rb +0 -33
  71. data/puma.gemspec +0 -52
@@ -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
data/Rakefile DELETED
@@ -1,158 +0,0 @@
1
- require "bundler/setup"
2
- require "hoe"
3
- require "rake/extensiontask"
4
- require "rake/javaextensiontask"
5
-
6
- IS_JRUBY = defined?(RUBY_ENGINE) ? RUBY_ENGINE == "jruby" : false
7
-
8
- Hoe.plugin :git
9
- Hoe.plugin :ignore
10
-
11
- HOE = Hoe.spec "puma" do
12
- self.readme_file = "README.md"
13
- self.urls = %w!http://puma.io https://github.com/puma/puma!
14
-
15
- license "BSD-3-Clause"
16
- developer 'Evan Phoenix', 'evan@phx.io'
17
-
18
- spec_extras[:extensions] = ["ext/puma_http11/extconf.rb"]
19
- spec_extras[:executables] = ['puma', 'pumactl']
20
- spec_extras[:homepage] = self.urls.first
21
-
22
- require_ruby_version ">= 1.9.3"
23
-
24
- dependency "rack", [">= 1.1", "< 3.0"], :development
25
-
26
- extra_dev_deps << ["rake-compiler", "~> 0.8"]
27
- end
28
-
29
- task :prerelease => [:clobber, :check_manifest, :test]
30
-
31
- # hoe/test and rake-compiler don't seem to play well together, so disable
32
- # hoe/test's .gemtest touch file thingy for now
33
- HOE.spec.files -= [".gemtest"]
34
-
35
- include Hoe::Git
36
-
37
- desc "Print the current changelog."
38
- task "changelog" do
39
- tag = ENV["FROM"] || git_tags.last
40
- range = [tag, "HEAD"].compact.join ".."
41
- cmd = "git log #{range} '--format=tformat:%B|||%aN|||%aE|||'"
42
- now = Time.new.strftime "%Y-%m-%d"
43
-
44
- changes = `#{cmd}`.split(/\|\|\|/).each_slice(3).map { |msg, author, email|
45
- msg.split(/\n/).reject { |s| s.empty? }.first
46
- }.flatten.compact
47
-
48
- $changes = Hash.new { |h,k| h[k] = [] }
49
-
50
- codes = {
51
- "!" => :major,
52
- "+" => :minor,
53
- "*" => :minor,
54
- "-" => :bug,
55
- "?" => :unknown,
56
- }
57
-
58
- codes_re = Regexp.escape codes.keys.join
59
-
60
- changes.each do |change|
61
- if change =~ /^\s*([#{codes_re}])\s*(.*)/ then
62
- code, line = codes[$1], $2
63
- else
64
- code, line = codes["?"], change.chomp
65
- end
66
-
67
- $changes[code] << line
68
- end
69
-
70
- puts "## #{ENV['VERSION'] || 'NEXT'} / #{now}"
71
- puts
72
- changelog_section :major
73
- changelog_section :minor
74
- changelog_section :bug
75
- changelog_section :unknown
76
- puts
77
- end
78
-
79
- # generate extension code using Ragel (C and Java)
80
- desc "Generate extension code (C and Java) using Ragel"
81
- task :ragel
82
-
83
- file 'ext/puma_http11/http11_parser.c' => ['ext/puma_http11/http11_parser.rl'] do |t|
84
- begin
85
- sh "ragel #{t.prerequisites.last} -C -G2 -I ext/puma_http11 -o #{t.name}"
86
- rescue
87
- fail "Could not build wrapper using Ragel (it failed or not installed?)"
88
- end
89
- end
90
- task :ragel => ['ext/puma_http11/http11_parser.c']
91
-
92
- file 'ext/puma_http11/org/jruby/puma/Http11Parser.java' => ['ext/puma_http11/http11_parser.java.rl'] do |t|
93
- begin
94
- sh "ragel #{t.prerequisites.last} -J -G2 -I ext/puma_http11 -o #{t.name}"
95
- rescue
96
- fail "Could not build wrapper using Ragel (it failed or not installed?)"
97
- end
98
- end
99
- task :ragel => ['ext/puma_http11/org/jruby/puma/Http11Parser.java']
100
-
101
- if !IS_JRUBY
102
-
103
- # compile extensions using rake-compiler
104
- # C (MRI, Rubinius)
105
- Rake::ExtensionTask.new("puma_http11", HOE.spec) do |ext|
106
- # place extension inside namespace
107
- ext.lib_dir = "lib/puma"
108
-
109
- ext.cross_compile = true
110
- ext.cross_platform = ['i386-mswin32-60', 'i386-mingw32']
111
- ext.cross_compiling do |spec|
112
- # add fat-binary stub only when cross compiling
113
- spec.files << "lib/puma/puma_http11.rb"
114
- end
115
-
116
- CLEAN.include "lib/puma/{1.8,1.9}"
117
- CLEAN.include "lib/puma/puma_http11.rb"
118
- end
119
-
120
- else
121
-
122
- # Java (JRuby)
123
- Rake::JavaExtensionTask.new("puma_http11", HOE.spec) do |ext|
124
- ext.lib_dir = "lib/puma"
125
- end
126
-
127
- end
128
-
129
- # the following is a fat-binary stub that will be used when
130
- # require 'puma/puma_http11' and will use either 1.8 or 1.9 version depending
131
- # on RUBY_VERSION
132
- file "lib/puma/puma_http11.rb" do |t|
133
- File.open(t.name, "w") do |f|
134
- f.puts "RUBY_VERSION =~ /(\d+.\d+)/"
135
- f.puts 'require "puma/#{$1}/puma_http11"'
136
- end
137
- end
138
-
139
- # tests require extension be compiled, but depend on the platform
140
- if IS_JRUBY
141
- task :test => [:java]
142
- else
143
- task :test => [:compile]
144
- end
145
-
146
- namespace :test do
147
- desc "Run the integration tests"
148
- task :integration do
149
- sh "cd test/shell; sh run.sh"
150
- end
151
-
152
- desc "Run all tests"
153
- if defined?(JRUBY_VERSION) and ENV['TRAVIS']
154
- task :all => :test
155
- else
156
- task :all => [:test, "test:integration"]
157
- end
158
- end
data/Release.md DELETED
@@ -1,9 +0,0 @@
1
- # Release process
2
-
3
- Using "3.7.1" as a version string example.
4
-
5
- 1. `be rake release_sanity VERSION=3.7.1`
6
- 2. `be rake release VERSION=3.7.1`
7
- 3. Switch to latest JRuby version
8
- 4. `rake java gem`
9
- 5. `gem push pkg/puma-3.7.1-java.gem`
data/gemfiles/2.1-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", "~> 1.6"
10
- gem "minitest", '~> 5.9'
11
-
12
- gem "jruby-openssl", :platform => "jruby"
data/lib/puma/compat.rb DELETED
@@ -1,14 +0,0 @@
1
- # Provides code to work properly on 1.8 and 1.9
2
-
3
- class String
4
- unless method_defined? :bytesize
5
- alias_method :bytesize, :size
6
- end
7
-
8
- unless method_defined? :byteslice
9
- def byteslice(*arg)
10
- enc = self.encoding
11
- self.dup.force_encoding(Encoding::ASCII_8BIT).slice(*arg).force_encoding(enc)
12
- end
13
- end
14
- end
@@ -1,45 +0,0 @@
1
- require 'java'
2
-
3
- # Conservative native JRuby/Java implementation of IOBuffer
4
- # backed by a ByteArrayOutputStream and conversion between
5
- # Ruby String and Java bytes
6
- module Puma
7
- class JavaIOBuffer < java.io.ByteArrayOutputStream
8
- field_reader :buf
9
- end
10
-
11
- class IOBuffer
12
- BUF_DEFAULT_SIZE = 4096
13
-
14
- def initialize
15
- @buf = JavaIOBuffer.new(BUF_DEFAULT_SIZE)
16
- end
17
-
18
- def reset
19
- @buf.reset
20
- end
21
-
22
- def <<(str)
23
- bytes = str.to_java_bytes
24
- @buf.write(bytes, 0, bytes.length)
25
- end
26
-
27
- def append(*strs)
28
- strs.each { |s| self << s; }
29
- end
30
-
31
- def to_s
32
- String.from_java_bytes @buf.to_byte_array
33
- end
34
-
35
- alias_method :to_str, :to_s
36
-
37
- def used
38
- @buf.size
39
- end
40
-
41
- def capacity
42
- @buf.buf.length
43
- end
44
- end
45
- end
@@ -1,33 +0,0 @@
1
- # :stopdoc:
2
-
3
- require 'uri/common'
4
-
5
- # Issue:
6
- # http://bugs.ruby-lang.org/issues/5925
7
- #
8
- # Relevant commit:
9
- # https://github.com/ruby/ruby/commit/edb7cdf1eabaff78dfa5ffedfbc2e91b29fa9ca1
10
-
11
-
12
- module URI
13
- begin
14
- 256.times do |i|
15
- TBLENCWWWCOMP_[i.chr] = '%%%02X' % i
16
- end
17
- TBLENCWWWCOMP_[' '] = '+'
18
- TBLENCWWWCOMP_.freeze
19
-
20
- 256.times do |i|
21
- h, l = i>>4, i&15
22
- TBLDECWWWCOMP_['%%%X%X' % [h, l]] = i.chr
23
- TBLDECWWWCOMP_['%%%x%X' % [h, l]] = i.chr
24
- TBLDECWWWCOMP_['%%%X%x' % [h, l]] = i.chr
25
- TBLDECWWWCOMP_['%%%x%x' % [h, l]] = i.chr
26
- end
27
- TBLDECWWWCOMP_['+'] = ' '
28
- TBLDECWWWCOMP_.freeze
29
- rescue Exception
30
- end
31
- end
32
-
33
- # :startdoc:
data/puma.gemspec DELETED
@@ -1,52 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- # This is only used when puma is a git dep from Bundler, so it's a little
4
- # weird.
5
-
6
- d = File.read(File.expand_path("../lib/puma/const.rb", __FILE__))
7
- if d =~ /VERSION = "(\d+\.\d+\.\d+)"/
8
- version = $1
9
- else
10
- version = "0.0.1"
11
- end
12
-
13
- Gem::Specification.new do |s|
14
- s.name = "puma"
15
- s.version = version
16
-
17
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
18
- s.authors = ["Evan Phoenix"]
19
- s.date = `git log --pretty="%ai" -n 1`.split(" ").first
20
- s.description = "Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications. Puma is intended for use in both development and production environments. It's great for highly concurrent Ruby implementations such as Rubinius and JRuby as well as as providing process worker support to support CRuby well."
21
- s.email = ["evan@phx.io"]
22
- s.executables = ["puma", "pumactl"]
23
- s.extensions = ["ext/puma_http11/extconf.rb"]
24
- s.files = `git ls-files`.split($/)
25
- s.homepage = "http://puma.io"
26
- s.license = "BSD-3-Clause"
27
- s.rdoc_options = ["--main", "README.md"]
28
- s.require_paths = ["lib"]
29
- s.required_ruby_version = Gem::Requirement.new(">= 1.9.3")
30
- s.rubyforge_project = "puma"
31
- s.rubygems_version = "1.8.25"
32
- s.summary = "Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications"
33
- s.test_files = s.files.grep(/^test/)
34
-
35
- if s.respond_to? :specification_version then
36
- s.specification_version = 3
37
-
38
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
39
- s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
40
- s.add_development_dependency(%q<rake-compiler>, ["~> 0.8.0"])
41
- s.add_development_dependency(%q<hoe>, ["~> 3.6"])
42
- else
43
- s.add_dependency(%q<rdoc>, ["~> 4.0"])
44
- s.add_dependency(%q<rake-compiler>, ["~> 0.8.0"])
45
- s.add_dependency(%q<hoe>, ["~> 3.6"])
46
- end
47
- else
48
- s.add_dependency(%q<rdoc>, ["~> 4.0"])
49
- s.add_dependency(%q<rake-compiler>, ["~> 0.8.0"])
50
- s.add_dependency(%q<hoe>, ["~> 3.6"])
51
- end
52
- end