unicorn 4.8.3 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +5 -5
  2. data/.document +0 -1
  3. data/.gitattributes +5 -0
  4. data/.gitignore +2 -2
  5. data/.manifest +15 -19
  6. data/.olddoc.yml +25 -0
  7. data/Application_Timeouts +7 -7
  8. data/CONTRIBUTORS +6 -2
  9. data/DESIGN +2 -4
  10. data/Documentation/.gitignore +1 -3
  11. data/Documentation/unicorn.1 +222 -0
  12. data/Documentation/unicorn_rails.1 +207 -0
  13. data/FAQ +23 -6
  14. data/GIT-VERSION-FILE +1 -1
  15. data/GIT-VERSION-GEN +1 -1
  16. data/GNUmakefile +138 -92
  17. data/HACKING +5 -30
  18. data/ISSUES +73 -36
  19. data/KNOWN_ISSUES +18 -18
  20. data/LATEST +16 -22
  21. data/LICENSE +2 -2
  22. data/Links +24 -22
  23. data/NEWS +771 -0
  24. data/PHILOSOPHY +0 -6
  25. data/README +48 -42
  26. data/Rakefile +0 -44
  27. data/SIGNALS +2 -2
  28. data/Sandbox +11 -10
  29. data/TODO +0 -2
  30. data/TUNING +30 -9
  31. data/archive/slrnpull.conf +1 -1
  32. data/bin/unicorn +4 -2
  33. data/bin/unicorn_rails +3 -3
  34. data/examples/big_app_gc.rb +1 -1
  35. data/examples/init.sh +36 -8
  36. data/examples/logrotate.conf +17 -2
  37. data/examples/nginx.conf +14 -14
  38. data/examples/unicorn.conf.minimal.rb +2 -2
  39. data/examples/unicorn.conf.rb +14 -6
  40. data/examples/unicorn.socket +11 -0
  41. data/examples/unicorn@.service +40 -0
  42. data/ext/unicorn_http/c_util.h +5 -13
  43. data/ext/unicorn_http/common_field_optimization.h +22 -5
  44. data/ext/unicorn_http/epollexclusive.h +124 -0
  45. data/ext/unicorn_http/ext_help.h +0 -44
  46. data/ext/unicorn_http/extconf.rb +32 -5
  47. data/ext/unicorn_http/global_variables.h +2 -2
  48. data/ext/unicorn_http/httpdate.c +3 -2
  49. data/ext/unicorn_http/unicorn_http.c +926 -638
  50. data/ext/unicorn_http/unicorn_http.rl +159 -170
  51. data/ext/unicorn_http/unicorn_http_common.rl +1 -1
  52. data/lib/unicorn/configurator.rb +110 -46
  53. data/lib/unicorn/const.rb +2 -25
  54. data/lib/unicorn/http_request.rb +110 -31
  55. data/lib/unicorn/http_response.rb +17 -31
  56. data/lib/unicorn/http_server.rb +259 -179
  57. data/lib/unicorn/launcher.rb +1 -1
  58. data/lib/unicorn/oob_gc.rb +6 -6
  59. data/lib/unicorn/select_waiter.rb +6 -0
  60. data/lib/unicorn/socket_helper.rb +58 -78
  61. data/lib/unicorn/stream_input.rb +8 -7
  62. data/lib/unicorn/tee_input.rb +16 -11
  63. data/lib/unicorn/tmpio.rb +10 -6
  64. data/lib/unicorn/util.rb +5 -4
  65. data/lib/unicorn/version.rb +1 -1
  66. data/lib/unicorn/worker.rb +36 -23
  67. data/lib/unicorn.rb +64 -44
  68. data/man/man1/unicorn.1 +124 -112
  69. data/man/man1/unicorn_rails.1 +106 -107
  70. data/t/GNUmakefile +3 -76
  71. data/t/README +4 -4
  72. data/t/t0002-parser-error.sh +3 -3
  73. data/t/t0011-active-unix-socket.sh +1 -1
  74. data/t/t0012-reload-empty-config.sh +2 -1
  75. data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
  76. data/t/t0301.ru +13 -0
  77. data/t/test-lib.sh +4 -3
  78. data/test/benchmark/README +14 -4
  79. data/test/benchmark/ddstream.ru +50 -0
  80. data/test/benchmark/readinput.ru +40 -0
  81. data/test/benchmark/uconnect.perl +66 -0
  82. data/test/exec/test_exec.rb +74 -20
  83. data/test/test_helper.rb +42 -33
  84. data/test/unit/test_ccc.rb +91 -0
  85. data/test/unit/test_droplet.rb +1 -1
  86. data/test/unit/test_http_parser.rb +49 -19
  87. data/test/unit/test_http_parser_ng.rb +98 -115
  88. data/test/unit/test_request.rb +11 -11
  89. data/test/unit/test_response.rb +31 -19
  90. data/test/unit/test_server.rb +89 -15
  91. data/test/unit/test_signals.rb +9 -9
  92. data/test/unit/test_socket_helper.rb +16 -12
  93. data/test/unit/test_tee_input.rb +10 -0
  94. data/test/unit/test_upload.rb +10 -15
  95. data/test/unit/test_util.rb +32 -6
  96. data/test/unit/test_waiter.rb +34 -0
  97. data/unicorn.gemspec +28 -23
  98. data/unicorn_1 +1 -0
  99. data/unicorn_rails_1 +1 -0
  100. metadata +37 -58
  101. data/.wrongdoc.yml +0 -11
  102. data/ChangeLog +0 -5027
  103. data/Documentation/GNUmakefile +0 -30
  104. data/Documentation/unicorn.1.txt +0 -178
  105. data/Documentation/unicorn_rails.1.txt +0 -175
  106. data/examples/git.ru +0 -13
  107. data/lib/unicorn/app/exec_cgi.rb +0 -154
  108. data/lib/unicorn/app/inetd.rb +0 -109
  109. data/lib/unicorn/ssl_client.rb +0 -11
  110. data/lib/unicorn/ssl_configurator.rb +0 -104
  111. data/lib/unicorn/ssl_server.rb +0 -42
  112. data/local.mk.sample +0 -59
  113. data/script/isolate_for_tests +0 -31
  114. data/t/hijack.ru +0 -42
  115. data/t/t0016-trust-x-forwarded-false.sh +0 -30
  116. data/t/t0017-trust-x-forwarded-true.sh +0 -30
  117. data/t/t0200-rack-hijack.sh +0 -27
  118. data/test/unit/test_http_parser_xftrust.rb +0 -38
  119. data/test/unit/test_sni_hostnames.rb +0 -47
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- require 'test/test_helper'
3
+ require './test/test_helper'
4
4
  require 'tempfile'
5
5
 
6
6
  class TestSocketHelper < Test::Unit::TestCase
@@ -57,8 +57,8 @@ class TestSocketHelper < Test::Unit::TestCase
57
57
  assert File.readable?(@unix_listener_path), "not readable"
58
58
  assert File.writable?(@unix_listener_path), "not writable"
59
59
  assert_equal 0777, File.umask
60
- ensure
61
- File.umask(old_umask)
60
+ ensure
61
+ File.umask(old_umask)
62
62
  end
63
63
 
64
64
  def test_bind_listen_unix_umask
@@ -71,8 +71,8 @@ class TestSocketHelper < Test::Unit::TestCase
71
71
  assert_equal @unix_listener_path, sock_name(@unix_listener)
72
72
  assert_equal 0140700, File.stat(@unix_listener_path).mode
73
73
  assert_equal 0777, File.umask
74
- ensure
75
- File.umask(old_umask)
74
+ ensure
75
+ File.umask(old_umask)
76
76
  end
77
77
 
78
78
  def test_bind_listen_unix_idempotent
@@ -116,7 +116,7 @@ class TestSocketHelper < Test::Unit::TestCase
116
116
  client.syswrite('abcde')
117
117
  exit 0
118
118
  end
119
- s = UNIXSocket.new(@unix_listener_path)
119
+ s = unix_socket(@unix_listener_path)
120
120
  IO.select([s])
121
121
  assert_equal 'abcde', s.sysread(5)
122
122
  pid, status = Process.waitpid2(pid)
@@ -150,28 +150,31 @@ class TestSocketHelper < Test::Unit::TestCase
150
150
  end
151
151
 
152
152
  def test_tcp_defer_accept_default
153
+ return unless defined?(TCP_DEFER_ACCEPT)
153
154
  port = unused_port @test_addr
154
155
  name = "#@test_addr:#{port}"
155
156
  sock = bind_listen(name)
156
157
  cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
157
158
  assert cur >= 1
158
- end if defined?(TCP_DEFER_ACCEPT)
159
+ end
159
160
 
160
161
  def test_tcp_defer_accept_disable
162
+ return unless defined?(TCP_DEFER_ACCEPT)
161
163
  port = unused_port @test_addr
162
164
  name = "#@test_addr:#{port}"
163
165
  sock = bind_listen(name, :tcp_defer_accept => false)
164
166
  cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
165
167
  assert_equal 0, cur
166
- end if defined?(TCP_DEFER_ACCEPT)
168
+ end
167
169
 
168
170
  def test_tcp_defer_accept_nr
171
+ return unless defined?(TCP_DEFER_ACCEPT)
169
172
  port = unused_port @test_addr
170
173
  name = "#@test_addr:#{port}"
171
174
  sock = bind_listen(name, :tcp_defer_accept => 60)
172
175
  cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
173
176
  assert cur > 1
174
- end if defined?(TCP_DEFER_ACCEPT)
177
+ end
175
178
 
176
179
  def test_ipv6only
177
180
  port = begin
@@ -182,14 +185,15 @@ class TestSocketHelper < Test::Unit::TestCase
182
185
  sock = bind_listen "[#@test6_addr]:#{port}", :ipv6only => true
183
186
  cur = sock.getsockopt(:IPPROTO_IPV6, :IPV6_V6ONLY).unpack('i')[0]
184
187
  assert_equal 1, cur
185
- rescue Errno::EAFNOSUPPORT
186
- end if RUBY_VERSION >= "1.9.2"
188
+ rescue Errno::EAFNOSUPPORT
189
+ end
187
190
 
188
191
  def test_reuseport
192
+ return unless defined?(Socket::SO_REUSEPORT)
189
193
  port = unused_port @test_addr
190
194
  name = "#@test_addr:#{port}"
191
195
  sock = bind_listen(name, :reuseport => true)
192
- cur = sock.getsockopt(Socket::SOL_SOCKET, SO_REUSEPORT).unpack('i')[0]
196
+ cur = sock.getsockopt(:SOL_SOCKET, :SO_REUSEPORT).int
193
197
  assert_operator cur, :>, 0
194
198
  rescue Errno::ENOPROTOOPT
195
199
  # kernel does not support SO_REUSEPORT (older Linux)
@@ -29,6 +29,13 @@ class TestTeeInput < Test::Unit::TestCase
29
29
  end while true
30
30
  end
31
31
 
32
+ def check_tempfiles
33
+ tmp = @parser.env["rack.tempfiles"]
34
+ assert_instance_of Array, tmp
35
+ assert_operator tmp.size, :>=, 1
36
+ assert_instance_of Unicorn::TmpIO, tmp[0]
37
+ end
38
+
32
39
  def test_gets_long
33
40
  r = init_request("hello", 5 + (4096 * 4 * 3) + "#$/foo#$/".size)
34
41
  ti = TeeInput.new(@rd, r)
@@ -106,6 +113,7 @@ class TestTeeInput < Test::Unit::TestCase
106
113
  assert_kind_of File, ti.tmp
107
114
  assert_equal 0, ti.tmp.pos
108
115
  assert_equal Unicorn::Const::MAX_BODY + 1, ti.size
116
+ check_tempfiles
109
117
  end
110
118
 
111
119
  def test_read_in_full_if_content_length
@@ -148,6 +156,7 @@ class TestTeeInput < Test::Unit::TestCase
148
156
  assert_nil ti.read(1)
149
157
  pid, status = Process.waitpid2(pid)
150
158
  assert status.success?
159
+ check_tempfiles
151
160
  end
152
161
 
153
162
  def test_chunked
@@ -183,6 +192,7 @@ class TestTeeInput < Test::Unit::TestCase
183
192
  status = nil
184
193
  pid, status = Process.waitpid2(pid)
185
194
  assert status.success?
195
+ check_tempfiles
186
196
  end
187
197
 
188
198
  def test_chunked_ping_pong
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
3
  # Copyright (c) 2009 Eric Wong
4
- require 'test/test_helper'
4
+ require './test/test_helper'
5
5
  require 'digest/md5'
6
6
 
7
7
  include Unicorn
@@ -60,7 +60,7 @@ class UploadTest < Test::Unit::TestCase
60
60
 
61
61
  def test_put
62
62
  start_server(@sha1_app)
63
- sock = TCPSocket.new(@addr, @port)
63
+ sock = tcp_socket(@addr, @port)
64
64
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n")
65
65
  @count.times do |i|
66
66
  buf = @random.sysread(@bs)
@@ -77,7 +77,7 @@ class UploadTest < Test::Unit::TestCase
77
77
  def test_put_content_md5
78
78
  md5 = Digest::MD5.new
79
79
  start_server(@sha1_app)
80
- sock = TCPSocket.new(@addr, @port)
80
+ sock = tcp_socket(@addr, @port)
81
81
  sock.syswrite("PUT / HTTP/1.0\r\nTransfer-Encoding: chunked\r\n" \
82
82
  "Trailer: Content-MD5\r\n\r\n")
83
83
  @count.times do |i|
@@ -103,7 +103,7 @@ class UploadTest < Test::Unit::TestCase
103
103
  @count, @bs = 2, 128
104
104
  start_server(@sha1_app)
105
105
  assert_equal 256, length
106
- sock = TCPSocket.new(@addr, @port)
106
+ sock = tcp_socket(@addr, @port)
107
107
  hdr = "PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n"
108
108
  @count.times do
109
109
  buf = @random.sysread(@bs)
@@ -122,7 +122,7 @@ class UploadTest < Test::Unit::TestCase
122
122
 
123
123
  def test_put_keepalive_truncates_small_overwrite
124
124
  start_server(@sha1_app)
125
- sock = TCPSocket.new(@addr, @port)
125
+ sock = tcp_socket(@addr, @port)
126
126
  to_upload = length + 1
127
127
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{to_upload}\r\n\r\n")
128
128
  @count.times do
@@ -155,7 +155,7 @@ class UploadTest < Test::Unit::TestCase
155
155
  tmp.write(nr.to_s)
156
156
  [ 200, @hdr, [] ]
157
157
  })
158
- sock = TCPSocket.new(@addr, @port)
158
+ sock = tcp_socket(@addr, @port)
159
159
  buf = ' ' * @bs
160
160
  sock.syswrite("PUT / HTTP/1.0\r\nContent-Length: #{length}\r\n\r\n")
161
161
 
@@ -236,15 +236,10 @@ class UploadTest < Test::Unit::TestCase
236
236
  resp = Tempfile.new('resp')
237
237
  resp.sync = true
238
238
 
239
- rd, wr = IO.pipe
240
- wr.sync = rd.sync = true
241
- pid = fork {
242
- STDIN.reopen(rd)
243
- rd.close
244
- wr.close
245
- STDOUT.reopen(resp)
246
- exec cmd
247
- }
239
+ rd, wr = IO.pipe.each do |io|
240
+ io.sync = io.close_on_exec = true
241
+ end
242
+ pid = spawn(*cmd, { 0 => rd, 1 => resp })
248
243
  rd.close
249
244
 
250
245
  tmp.rewind
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- require 'test/test_helper'
3
+ require './test/test_helper'
4
4
  require 'tempfile'
5
5
 
6
6
  class TestUtil < Test::Unit::TestCase
@@ -51,7 +51,7 @@ class TestUtil < Test::Unit::TestCase
51
51
  def test_reopen_logs_renamed_with_encoding
52
52
  tmp = Tempfile.new('')
53
53
  tmp_path = tmp.path.dup.freeze
54
- Encoding.list.each { |encoding|
54
+ Encoding.list.sample(5).each { |encoding|
55
55
  File.open(tmp_path, "a:#{encoding.to_s}") { |fp|
56
56
  fp.sync = true
57
57
  assert_equal encoding, fp.external_encoding
@@ -69,13 +69,14 @@ class TestUtil < Test::Unit::TestCase
69
69
  }
70
70
  }
71
71
  tmp.close!
72
- end if STDIN.respond_to?(:external_encoding)
72
+ end
73
73
 
74
74
  def test_reopen_logs_renamed_with_internal_encoding
75
75
  tmp = Tempfile.new('')
76
76
  tmp_path = tmp.path.dup.freeze
77
- Encoding.list.each { |ext|
78
- Encoding.list.each { |int|
77
+ full = Encoding.list
78
+ full.sample(2).each { |ext|
79
+ full.sample(2).each { |int|
79
80
  next if ext == int
80
81
  File.open(tmp_path, "a:#{ext.to_s}:#{int.to_s}") { |fp|
81
82
  fp.sync = true
@@ -101,5 +102,30 @@ class TestUtil < Test::Unit::TestCase
101
102
  }
102
103
  }
103
104
  tmp.close!
104
- end if STDIN.respond_to?(:external_encoding)
105
+ end
106
+
107
+ def test_pipe
108
+ r, w = Unicorn.pipe
109
+ assert r
110
+ assert w
111
+
112
+ return if RUBY_PLATFORM !~ /linux/
113
+
114
+ begin
115
+ f_getpipe_sz = 1032
116
+ IO.pipe do |a, b|
117
+ a_sz = a.fcntl(f_getpipe_sz)
118
+ b.fcntl(f_getpipe_sz)
119
+ assert_kind_of Integer, a_sz
120
+ r_sz = r.fcntl(f_getpipe_sz)
121
+ assert_equal Raindrops::PAGE_SIZE, r_sz
122
+ assert_operator a_sz, :>=, r_sz
123
+ end
124
+ rescue Errno::EINVAL
125
+ # Linux <= 2.6.34
126
+ end
127
+ ensure
128
+ w.close
129
+ r.close
130
+ end
105
131
  end
@@ -0,0 +1,34 @@
1
+ require 'test/unit'
2
+ require 'unicorn'
3
+ require 'unicorn/select_waiter'
4
+ class TestSelectWaiter < Test::Unit::TestCase
5
+
6
+ def test_select_timeout # n.b. this is level-triggered
7
+ sw = Unicorn::SelectWaiter.new
8
+ IO.pipe do |r,w|
9
+ sw.get_readers(ready = [], [r], 0)
10
+ assert_equal [], ready
11
+ w.syswrite '.'
12
+ sw.get_readers(ready, [r], 1000)
13
+ assert_equal [r], ready
14
+ sw.get_readers(ready, [r], 0)
15
+ assert_equal [r], ready
16
+ end
17
+ end
18
+
19
+ def test_linux # ugh, also level-triggered, unlikely to change
20
+ IO.pipe do |r,w|
21
+ wtr = Unicorn::Waiter.prep_readers([r])
22
+ wtr.get_readers(ready = [], [r], 0)
23
+ assert_equal [], ready
24
+ w.syswrite '.'
25
+ wtr.get_readers(ready = [], [r], 1000)
26
+ assert_equal [r], ready
27
+ wtr.get_readers(ready = [], [r], 1000)
28
+ assert_equal [r], ready, 'still ready (level-triggered :<)'
29
+ assert_nil wtr.close
30
+ end
31
+ rescue SystemCallError => e
32
+ warn "#{e.message} (#{e.class})"
33
+ end if Unicorn.const_defined?(:Waiter)
34
+ end
data/unicorn.gemspec CHANGED
@@ -1,9 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
- ENV["VERSION"] or abort "VERSION= must be specified"
3
- manifest = File.readlines('.manifest').map! { |x| x.chomp! }
4
- require 'wrongdoc'
5
- extend Wrongdoc::Gemspec
6
- name, summary, title = readme_metadata
2
+ manifest = File.exist?('.manifest') ?
3
+ IO.readlines('.manifest').map!(&:chomp!) : `git ls-files`.split("\n")
7
4
 
8
5
  # don't bother with tests that fork, not worth our time to get working
9
6
  # with `gem check -t` ... (of course we care for them when testing with
@@ -14,31 +11,39 @@ end.compact
14
11
 
15
12
  Gem::Specification.new do |s|
16
13
  s.name = %q{unicorn}
17
- s.version = ENV["VERSION"].dup
18
- s.authors = ["#{name} hackers"]
19
- s.summary = summary
20
- s.date = Time.now.utc.strftime('%Y-%m-%d')
21
- s.description = readme_description
22
- s.email = %q{unicorn-public@bogomips.org}
14
+ s.version = (ENV['VERSION'] || '6.1.0').dup
15
+ s.authors = ['unicorn hackers']
16
+ s.summary = 'Rack HTTP server for fast clients and Unix'
17
+ s.description = File.read('README').split("\n\n")[1]
18
+ s.email = %q{unicorn-public@yhbt.net}
23
19
  s.executables = %w(unicorn unicorn_rails)
24
20
  s.extensions = %w(ext/unicorn_http/extconf.rb)
25
- s.extra_rdoc_files = extra_rdoc_files(manifest)
21
+ s.extra_rdoc_files = IO.readlines('.document').map!(&:chomp!).keep_if do |f|
22
+ File.exist?(f)
23
+ end
26
24
  s.files = manifest
27
- s.homepage = Wrongdoc.config[:rdoc_url]
28
- s.rdoc_options = rdoc_options
29
- s.rubyforge_project = %q{mongrel}
25
+ s.homepage = 'https://yhbt.net/unicorn/'
30
26
  s.test_files = test_files
31
27
 
32
- # for people that are absolutely stuck on Rails 2.3.2 and can't
33
- # up/downgrade to any other version, the Rack dependency may be
34
- # commented out. Nevertheless, upgrading to Rails 2.3.4 or later is
35
- # *strongly* recommended for security reasons.
36
- s.add_dependency(%q<rack>)
28
+ # 2.0.0 is the minimum supported version. We don't specify
29
+ # a maximum version to make it easier to test pre-releases,
30
+ # but we do warn users if they install unicorn on an untested
31
+ # version in extconf.rb
32
+ s.required_ruby_version = ">= 2.0.0"
33
+
34
+ # We do not have a hard dependency on rack, it's possible to load
35
+ # things which respond to #call. HTTP status lines in responses
36
+ # won't have descriptive text, only the numeric status.
37
+ s.add_development_dependency(%q<rack>)
38
+
37
39
  s.add_dependency(%q<kgio>, '~> 2.6')
38
40
  s.add_dependency(%q<raindrops>, '~> 0.7')
39
41
 
40
- s.add_development_dependency('isolate', '~> 3.2')
41
- s.add_development_dependency('wrongdoc', '~> 1.8')
42
+ s.add_development_dependency('test-unit', '~> 3.0')
42
43
 
43
- s.licenses = ["GPLv2+", "Ruby 1.8"]
44
+ # Note: To avoid ambiguity, we intentionally avoid the SPDX-compatible
45
+ # 'Ruby' here since Ruby 1.9.3 switched to BSD-2-Clause, but we
46
+ # inherited our license from Mongrel when Ruby was at 1.8.
47
+ # We cannot automatically switch licenses when Ruby changes.
48
+ s.licenses = ['GPL-2.0+', 'Ruby-1.8']
44
49
  end
data/unicorn_1 ADDED
@@ -0,0 +1 @@
1
+ olddoc_placeholder
data/unicorn_rails_1 ADDED
@@ -0,0 +1 @@
1
+ olddoc_placeholder
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.3
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Unicorn hackers
7
+ - unicorn hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-07 00:00:00.000000000 Z
11
+ date: 2021-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -17,7 +17,7 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
- type: :runtime
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -53,40 +53,26 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.7'
55
55
  - !ruby/object:Gem::Dependency
56
- name: isolate
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.2'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.2'
69
- - !ruby/object:Gem::Dependency
70
- name: wrongdoc
56
+ name: test-unit
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '1.8'
61
+ version: '3.0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '1.8'
68
+ version: '3.0'
83
69
  description: |-
84
- \Unicorn is an HTTP server for Rack applications designed to only serve
70
+ unicorn is an HTTP server for Rack applications designed to only serve
85
71
  fast clients on low-latency, high-bandwidth connections and take
86
72
  advantage of features in Unix/Unix-like kernels. Slow clients should
87
73
  only be served by placing a reverse proxy capable of fully buffering
88
- both the the request and response in between \Unicorn and slow clients.
89
- email: unicorn-public@bogomips.org
74
+ both the the request and response in between unicorn and slow clients.
75
+ email: unicorn-public@yhbt.net
90
76
  executables:
91
77
  - unicorn
92
78
  - unicorn_rails
@@ -105,7 +91,6 @@ extra_rdoc_files:
105
91
  - KNOWN_ISSUES
106
92
  - TODO
107
93
  - NEWS
108
- - ChangeLog
109
94
  - LATEST
110
95
  - lib/unicorn.rb
111
96
  - lib/unicorn/configurator.rb
@@ -116,6 +101,8 @@ extra_rdoc_files:
116
101
  - lib/unicorn/util.rb
117
102
  - lib/unicorn/oob_gc.rb
118
103
  - lib/unicorn/worker.rb
104
+ - unicorn_1
105
+ - unicorn_rails_1
119
106
  - ISSUES
120
107
  - Sandbox
121
108
  - Links
@@ -123,19 +110,18 @@ extra_rdoc_files:
123
110
  files:
124
111
  - ".CHANGELOG.old"
125
112
  - ".document"
113
+ - ".gitattributes"
126
114
  - ".gitignore"
127
115
  - ".mailmap"
128
116
  - ".manifest"
129
- - ".wrongdoc.yml"
117
+ - ".olddoc.yml"
130
118
  - Application_Timeouts
131
119
  - CONTRIBUTORS
132
120
  - COPYING
133
- - ChangeLog
134
121
  - DESIGN
135
122
  - Documentation/.gitignore
136
- - Documentation/GNUmakefile
137
- - Documentation/unicorn.1.txt
138
- - Documentation/unicorn_rails.1.txt
123
+ - Documentation/unicorn.1
124
+ - Documentation/unicorn_rails.1
139
125
  - FAQ
140
126
  - GIT-VERSION-FILE
141
127
  - GIT-VERSION-GEN
@@ -160,16 +146,18 @@ files:
160
146
  - bin/unicorn_rails
161
147
  - examples/big_app_gc.rb
162
148
  - examples/echo.ru
163
- - examples/git.ru
164
149
  - examples/init.sh
165
150
  - examples/logger_mp_safe.rb
166
151
  - examples/logrotate.conf
167
152
  - examples/nginx.conf
168
153
  - examples/unicorn.conf.minimal.rb
169
154
  - examples/unicorn.conf.rb
155
+ - examples/unicorn.socket
156
+ - examples/unicorn@.service
170
157
  - ext/unicorn_http/CFLAGS
171
158
  - ext/unicorn_http/c_util.h
172
159
  - ext/unicorn_http/common_field_optimization.h
160
+ - ext/unicorn_http/epollexclusive.h
173
161
  - ext/unicorn_http/ext_help.h
174
162
  - ext/unicorn_http/extconf.rb
175
163
  - ext/unicorn_http/global_variables.h
@@ -178,8 +166,6 @@ files:
178
166
  - ext/unicorn_http/unicorn_http.rl
179
167
  - ext/unicorn_http/unicorn_http_common.rl
180
168
  - lib/unicorn.rb
181
- - lib/unicorn/app/exec_cgi.rb
182
- - lib/unicorn/app/inetd.rb
183
169
  - lib/unicorn/app/old_rails.rb
184
170
  - lib/unicorn/app/old_rails/static.rb
185
171
  - lib/unicorn/cgi_wrapper.rb
@@ -191,20 +177,16 @@ files:
191
177
  - lib/unicorn/launcher.rb
192
178
  - lib/unicorn/oob_gc.rb
193
179
  - lib/unicorn/preread_input.rb
180
+ - lib/unicorn/select_waiter.rb
194
181
  - lib/unicorn/socket_helper.rb
195
- - lib/unicorn/ssl_client.rb
196
- - lib/unicorn/ssl_configurator.rb
197
- - lib/unicorn/ssl_server.rb
198
182
  - lib/unicorn/stream_input.rb
199
183
  - lib/unicorn/tee_input.rb
200
184
  - lib/unicorn/tmpio.rb
201
185
  - lib/unicorn/util.rb
202
186
  - lib/unicorn/version.rb
203
187
  - lib/unicorn/worker.rb
204
- - local.mk.sample
205
188
  - man/man1/unicorn.1
206
189
  - man/man1/unicorn_rails.1
207
- - script/isolate_for_tests
208
190
  - setup.rb
209
191
  - t/.gitignore
210
192
  - t/GNUmakefile
@@ -217,7 +199,6 @@ files:
217
199
  - t/env.ru
218
200
  - t/fails-rack-lint.ru
219
201
  - t/heartbeat-timeout.ru
220
- - t/hijack.ru
221
202
  - t/listener_names.ru
222
203
  - t/my-tap-lib.sh
223
204
  - t/oob_gc.ru
@@ -247,8 +228,6 @@ files:
247
228
  - t/t0014-rewindable-input-true.sh
248
229
  - t/t0014.ru
249
230
  - t/t0015-configurator-internals.sh
250
- - t/t0016-trust-x-forwarded-false.sh
251
- - t/t0017-trust-x-forwarded-true.sh
252
231
  - t/t0018-write-on-close.sh
253
232
  - t/t0019-max_header_len.sh
254
233
  - t/t0020-at_exit-handler.sh
@@ -257,8 +236,9 @@ files:
257
236
  - t/t0100-rack-input-tests.sh
258
237
  - t/t0116-client_body_buffer_size.sh
259
238
  - t/t0116.ru
260
- - t/t0200-rack-hijack.sh
261
239
  - t/t0300-no-default-middleware.sh
240
+ - t/t0301-no-default-middleware-ignored-in-config.sh
241
+ - t/t0301.ru
262
242
  - t/t9000-preread-input.sh
263
243
  - t/t9001-oob_gc.sh
264
244
  - t/t9002-oob_gc-path.sh
@@ -267,52 +247,52 @@ files:
267
247
  - test/aggregate.rb
268
248
  - test/benchmark/README
269
249
  - test/benchmark/dd.ru
250
+ - test/benchmark/ddstream.ru
251
+ - test/benchmark/readinput.ru
270
252
  - test/benchmark/stack.ru
253
+ - test/benchmark/uconnect.perl
271
254
  - test/exec/README
272
255
  - test/exec/test_exec.rb
273
256
  - test/test_helper.rb
257
+ - test/unit/test_ccc.rb
274
258
  - test/unit/test_configurator.rb
275
259
  - test/unit/test_droplet.rb
276
260
  - test/unit/test_http_parser.rb
277
261
  - test/unit/test_http_parser_ng.rb
278
- - test/unit/test_http_parser_xftrust.rb
279
262
  - test/unit/test_request.rb
280
263
  - test/unit/test_response.rb
281
264
  - test/unit/test_server.rb
282
265
  - test/unit/test_signals.rb
283
- - test/unit/test_sni_hostnames.rb
284
266
  - test/unit/test_socket_helper.rb
285
267
  - test/unit/test_stream_input.rb
286
268
  - test/unit/test_tee_input.rb
287
269
  - test/unit/test_upload.rb
288
270
  - test/unit/test_util.rb
271
+ - test/unit/test_waiter.rb
289
272
  - unicorn.gemspec
290
- homepage: http://unicorn.bogomips.org/
273
+ - unicorn_1
274
+ - unicorn_rails_1
275
+ homepage: https://yhbt.net/unicorn/
291
276
  licenses:
292
- - GPLv2+
293
- - Ruby 1.8
277
+ - GPL-2.0+
278
+ - Ruby-1.8
294
279
  metadata: {}
295
280
  post_install_message:
296
- rdoc_options:
297
- - "-t"
298
- - 'Unicorn: Rack HTTP server for fast clients and Unix'
299
- - "-W"
300
- - http://bogomips.org/unicorn.git/tree/%s
281
+ rdoc_options: []
301
282
  require_paths:
302
283
  - lib
303
284
  required_ruby_version: !ruby/object:Gem::Requirement
304
285
  requirements:
305
286
  - - ">="
306
287
  - !ruby/object:Gem::Version
307
- version: '0'
288
+ version: 2.0.0
308
289
  required_rubygems_version: !ruby/object:Gem::Requirement
309
290
  requirements:
310
291
  - - ">="
311
292
  - !ruby/object:Gem::Version
312
293
  version: '0'
313
294
  requirements: []
314
- rubyforge_project: mongrel
315
- rubygems_version: 2.2.2
295
+ rubygems_version: 3.0.2
316
296
  signing_key:
317
297
  specification_version: 4
318
298
  summary: Rack HTTP server for fast clients and Unix
@@ -320,9 +300,8 @@ test_files:
320
300
  - test/unit/test_configurator.rb
321
301
  - test/unit/test_http_parser.rb
322
302
  - test/unit/test_http_parser_ng.rb
323
- - test/unit/test_http_parser_xftrust.rb
324
303
  - test/unit/test_request.rb
325
- - test/unit/test_response.rb
326
304
  - test/unit/test_server.rb
327
- - test/unit/test_sni_hostnames.rb
305
+ - test/unit/test_upload.rb
328
306
  - test/unit/test_util.rb
307
+ - test/unit/test_waiter.rb
data/.wrongdoc.yml DELETED
@@ -1,11 +0,0 @@
1
- ---
2
- cgit_url: http://bogomips.org/unicorn.git
3
- git_url: git://bogomips.org/unicorn.git
4
- rdoc_url: http://unicorn.bogomips.org/
5
- ml_url: http://bogomips.org/unicorn-public/
6
- changelog_start: v1.1.5
7
- merge_html:
8
- unicorn_1: Documentation/unicorn.1.html
9
- unicorn_rails_1: Documentation/unicorn_rails.1.html
10
- public_email: unicorn-public@bogomips.org
11
- private_email: unicorn@bogomips.org