unicorn-maintained 6.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.CHANGELOG.old +25 -0
- data/.document +28 -0
- data/.gitattributes +5 -0
- data/.gitignore +25 -0
- data/.mailmap +26 -0
- data/.manifest +149 -0
- data/.olddoc.yml +25 -0
- data/Application_Timeouts +77 -0
- data/CONTRIBUTORS +39 -0
- data/COPYING +674 -0
- data/DESIGN +99 -0
- data/Documentation/.gitignore +3 -0
- data/Documentation/unicorn.1 +222 -0
- data/Documentation/unicorn_rails.1 +207 -0
- data/FAQ +70 -0
- data/GIT-VERSION-FILE +1 -0
- data/GIT-VERSION-GEN +39 -0
- data/GNUmakefile +317 -0
- data/HACKING +112 -0
- data/ISSUES +102 -0
- data/KNOWN_ISSUES +79 -0
- data/LATEST +1 -0
- data/LICENSE +67 -0
- data/Links +58 -0
- data/NEWS +1 -0
- data/PHILOSOPHY +139 -0
- data/README +156 -0
- data/Rakefile +16 -0
- data/SIGNALS +123 -0
- data/Sandbox +104 -0
- data/TODO +3 -0
- data/TUNING +119 -0
- data/archive/.gitignore +3 -0
- data/archive/slrnpull.conf +4 -0
- data/bin/unicorn +128 -0
- data/bin/unicorn_rails +209 -0
- data/examples/big_app_gc.rb +2 -0
- data/examples/echo.ru +26 -0
- data/examples/init.sh +102 -0
- data/examples/logger_mp_safe.rb +25 -0
- data/examples/logrotate.conf +44 -0
- data/examples/nginx.conf +156 -0
- data/examples/unicorn.conf.minimal.rb +13 -0
- data/examples/unicorn.conf.rb +110 -0
- data/examples/unicorn.socket +11 -0
- data/examples/unicorn@.service +40 -0
- data/ext/unicorn_http/CFLAGS +13 -0
- data/ext/unicorn_http/c_util.h +116 -0
- data/ext/unicorn_http/common_field_optimization.h +128 -0
- data/ext/unicorn_http/epollexclusive.h +128 -0
- data/ext/unicorn_http/ext_help.h +38 -0
- data/ext/unicorn_http/extconf.rb +39 -0
- data/ext/unicorn_http/global_variables.h +97 -0
- data/ext/unicorn_http/httpdate.c +91 -0
- data/ext/unicorn_http/unicorn_http.c +4334 -0
- data/ext/unicorn_http/unicorn_http.rl +1040 -0
- data/ext/unicorn_http/unicorn_http_common.rl +76 -0
- data/lib/unicorn/app/old_rails/static.rb +59 -0
- data/lib/unicorn/app/old_rails.rb +35 -0
- data/lib/unicorn/cgi_wrapper.rb +147 -0
- data/lib/unicorn/configurator.rb +748 -0
- data/lib/unicorn/const.rb +21 -0
- data/lib/unicorn/http_request.rb +201 -0
- data/lib/unicorn/http_response.rb +93 -0
- data/lib/unicorn/http_server.rb +859 -0
- data/lib/unicorn/launcher.rb +62 -0
- data/lib/unicorn/oob_gc.rb +81 -0
- data/lib/unicorn/preread_input.rb +33 -0
- data/lib/unicorn/select_waiter.rb +6 -0
- data/lib/unicorn/socket_helper.rb +185 -0
- data/lib/unicorn/stream_input.rb +151 -0
- data/lib/unicorn/tee_input.rb +131 -0
- data/lib/unicorn/tmpio.rb +33 -0
- data/lib/unicorn/util.rb +90 -0
- data/lib/unicorn/version.rb +1 -0
- data/lib/unicorn/worker.rb +165 -0
- data/lib/unicorn.rb +136 -0
- data/man/man1/unicorn.1 +222 -0
- data/man/man1/unicorn_rails.1 +207 -0
- data/setup.rb +1586 -0
- data/t/.gitignore +4 -0
- data/t/GNUmakefile +5 -0
- data/t/README +49 -0
- data/t/active-unix-socket.t +117 -0
- data/t/bin/unused_listen +40 -0
- data/t/broken-app.ru +12 -0
- data/t/client_body_buffer_size.ru +14 -0
- data/t/client_body_buffer_size.t +80 -0
- data/t/detach.ru +11 -0
- data/t/env.ru +3 -0
- data/t/fails-rack-lint.ru +5 -0
- data/t/heartbeat-timeout.ru +12 -0
- data/t/heartbeat-timeout.t +62 -0
- data/t/integration.ru +115 -0
- data/t/integration.t +356 -0
- data/t/lib.perl +258 -0
- data/t/listener_names.ru +4 -0
- data/t/my-tap-lib.sh +201 -0
- data/t/oob_gc.ru +17 -0
- data/t/oob_gc_path.ru +17 -0
- data/t/pid.ru +3 -0
- data/t/preread_input.ru +22 -0
- data/t/reload-bad-config.t +54 -0
- data/t/reopen-logs.ru +13 -0
- data/t/reopen-logs.t +39 -0
- data/t/t0008-back_out_of_upgrade.sh +110 -0
- data/t/t0009-broken-app.sh +56 -0
- data/t/t0010-reap-logging.sh +55 -0
- data/t/t0012-reload-empty-config.sh +86 -0
- data/t/t0013-rewindable-input-false.sh +24 -0
- data/t/t0013.ru +12 -0
- data/t/t0014-rewindable-input-true.sh +24 -0
- data/t/t0014.ru +12 -0
- data/t/t0015-configurator-internals.sh +25 -0
- data/t/t0020-at_exit-handler.sh +49 -0
- data/t/t0021-process_detach.sh +29 -0
- data/t/t0022-listener_names-preload_app.sh +32 -0
- data/t/t0300-no-default-middleware.sh +20 -0
- data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
- data/t/t0301.ru +13 -0
- data/t/t9001-oob_gc.sh +47 -0
- data/t/t9002-oob_gc-path.sh +75 -0
- data/t/test-lib.sh +125 -0
- data/t/winch_ttin.t +67 -0
- data/t/working_directory.t +94 -0
- data/test/aggregate.rb +15 -0
- data/test/benchmark/README +60 -0
- data/test/benchmark/dd.ru +18 -0
- data/test/benchmark/ddstream.ru +50 -0
- data/test/benchmark/readinput.ru +40 -0
- data/test/benchmark/stack.ru +8 -0
- data/test/benchmark/uconnect.perl +66 -0
- data/test/exec/README +5 -0
- data/test/exec/test_exec.rb +1029 -0
- data/test/test_helper.rb +306 -0
- data/test/unit/test_ccc.rb +91 -0
- data/test/unit/test_configurator.rb +175 -0
- data/test/unit/test_droplet.rb +28 -0
- data/test/unit/test_http_parser.rb +884 -0
- data/test/unit/test_http_parser_ng.rb +714 -0
- data/test/unit/test_request.rb +169 -0
- data/test/unit/test_server.rb +244 -0
- data/test/unit/test_signals.rb +188 -0
- data/test/unit/test_socket_helper.rb +159 -0
- data/test/unit/test_stream_input.rb +210 -0
- data/test/unit/test_tee_input.rb +303 -0
- data/test/unit/test_util.rb +131 -0
- data/test/unit/test_waiter.rb +34 -0
- data/unicorn.gemspec +48 -0
- metadata +275 -0
@@ -0,0 +1,131 @@
|
|
1
|
+
# -*- encoding: binary -*-
|
2
|
+
|
3
|
+
require './test/test_helper'
|
4
|
+
require 'tempfile'
|
5
|
+
|
6
|
+
class TestUtil < Test::Unit::TestCase
|
7
|
+
|
8
|
+
EXPECT_FLAGS = File::WRONLY | File::APPEND
|
9
|
+
def test_reopen_logs_noop
|
10
|
+
tmp = Tempfile.new('')
|
11
|
+
fp = File.open(tmp.path, 'ab')
|
12
|
+
fp.sync = true
|
13
|
+
ext = fp.external_encoding rescue nil
|
14
|
+
int = fp.internal_encoding rescue nil
|
15
|
+
before = fp.stat.inspect
|
16
|
+
Unicorn::Util.reopen_logs
|
17
|
+
assert_equal before, File.stat(fp.path).inspect
|
18
|
+
assert_equal ext, (fp.external_encoding rescue nil)
|
19
|
+
assert_equal int, (fp.internal_encoding rescue nil)
|
20
|
+
assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
|
21
|
+
tmp.close!
|
22
|
+
fp.close
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_reopen_logs_renamed
|
26
|
+
tmp = Tempfile.new('')
|
27
|
+
tmp_path = tmp.path.freeze
|
28
|
+
fp = File.open(tmp_path, 'ab')
|
29
|
+
fp.sync = true
|
30
|
+
|
31
|
+
ext = fp.external_encoding rescue nil
|
32
|
+
int = fp.internal_encoding rescue nil
|
33
|
+
before = fp.stat.inspect
|
34
|
+
to = Tempfile.new('')
|
35
|
+
File.rename(tmp_path, to.path)
|
36
|
+
assert ! File.exist?(tmp_path)
|
37
|
+
Unicorn::Util.reopen_logs
|
38
|
+
assert_equal tmp_path, tmp.path
|
39
|
+
assert File.exist?(tmp_path)
|
40
|
+
assert before != File.stat(tmp_path).inspect
|
41
|
+
assert_equal fp.stat.inspect, File.stat(tmp_path).inspect
|
42
|
+
assert_equal ext, (fp.external_encoding rescue nil)
|
43
|
+
assert_equal int, (fp.internal_encoding rescue nil)
|
44
|
+
assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
|
45
|
+
assert fp.sync
|
46
|
+
tmp.close!
|
47
|
+
to.close!
|
48
|
+
fp.close
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_reopen_logs_renamed_with_encoding
|
52
|
+
tmp = Tempfile.new('')
|
53
|
+
tmp_path = tmp.path.dup.freeze
|
54
|
+
Encoding.list.sample(5).each { |encoding|
|
55
|
+
File.open(tmp_path, "a:#{encoding.to_s}") { |fp|
|
56
|
+
fp.sync = true
|
57
|
+
assert_equal encoding, fp.external_encoding
|
58
|
+
assert_nil fp.internal_encoding
|
59
|
+
File.unlink(tmp_path)
|
60
|
+
assert ! File.exist?(tmp_path)
|
61
|
+
Unicorn::Util.reopen_logs
|
62
|
+
assert_equal tmp_path, fp.path
|
63
|
+
assert File.exist?(tmp_path)
|
64
|
+
assert_equal fp.stat.inspect, File.stat(tmp_path).inspect
|
65
|
+
assert_equal encoding, fp.external_encoding
|
66
|
+
assert_nil fp.internal_encoding
|
67
|
+
assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
|
68
|
+
assert fp.sync
|
69
|
+
}
|
70
|
+
}
|
71
|
+
tmp.close!
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_reopen_logs_renamed_with_internal_encoding
|
75
|
+
tmp = Tempfile.new('')
|
76
|
+
tmp_path = tmp.path.dup.freeze
|
77
|
+
full = Encoding.list
|
78
|
+
full.sample(2).each { |ext|
|
79
|
+
full.sample(2).each { |int|
|
80
|
+
next if ext == int
|
81
|
+
File.open(tmp_path, "a:#{ext.to_s}:#{int.to_s}") { |fp|
|
82
|
+
fp.sync = true
|
83
|
+
assert_equal ext, fp.external_encoding
|
84
|
+
|
85
|
+
if ext != Encoding::BINARY
|
86
|
+
assert_equal int, fp.internal_encoding
|
87
|
+
end
|
88
|
+
|
89
|
+
File.unlink(tmp_path)
|
90
|
+
assert ! File.exist?(tmp_path)
|
91
|
+
Unicorn::Util.reopen_logs
|
92
|
+
assert_equal tmp_path, fp.path
|
93
|
+
assert File.exist?(tmp_path)
|
94
|
+
assert_equal fp.stat.inspect, File.stat(tmp_path).inspect
|
95
|
+
assert_equal ext, fp.external_encoding
|
96
|
+
if ext != Encoding::BINARY
|
97
|
+
assert_equal int, fp.internal_encoding
|
98
|
+
end
|
99
|
+
assert_equal(EXPECT_FLAGS, EXPECT_FLAGS & fp.fcntl(Fcntl::F_GETFL))
|
100
|
+
assert fp.sync
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
tmp.close!
|
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
|
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
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# -*- encoding: binary -*-
|
2
|
+
manifest = File.exist?('.manifest') ?
|
3
|
+
IO.readlines('.manifest').map!(&:chomp!) : `git ls-files`.split("\n")
|
4
|
+
|
5
|
+
# don't bother with tests that fork, not worth our time to get working
|
6
|
+
# with `gem check -t` ... (of course we care for them when testing with
|
7
|
+
# GNU make when they can run in parallel)
|
8
|
+
test_files = manifest.grep(%r{\Atest/unit/test_.*\.rb\z}).map do |f|
|
9
|
+
File.readlines(f).grep(/\bfork\b/).empty? ? f : nil
|
10
|
+
end.compact
|
11
|
+
|
12
|
+
Gem::Specification.new do |s|
|
13
|
+
s.name = "unicorn-maintained"
|
14
|
+
s.version = (ENV['VERSION'] || '6.2.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}
|
19
|
+
s.executables = %w(unicorn unicorn_rails)
|
20
|
+
s.extensions = %w(ext/unicorn_http/extconf.rb)
|
21
|
+
s.extra_rdoc_files = IO.readlines('.document').map!(&:chomp!).keep_if do |f|
|
22
|
+
File.exist?(f)
|
23
|
+
end
|
24
|
+
s.files = manifest
|
25
|
+
s.homepage = 'https://yhbt.net/unicorn/'
|
26
|
+
s.test_files = test_files
|
27
|
+
|
28
|
+
# 2.5.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.5.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('rack')
|
38
|
+
|
39
|
+
s.add_dependency('raindrops-maintained', '~> 0.21')
|
40
|
+
|
41
|
+
s.add_development_dependency('test-unit', '~> 3.0')
|
42
|
+
|
43
|
+
# Note: To avoid ambiguity, we intentionally avoid the SPDX-compatible
|
44
|
+
# 'Ruby' here since Ruby 1.9.3 switched to BSD-2-Clause, but we
|
45
|
+
# inherited our license from Mongrel when Ruby was at 1.8.
|
46
|
+
# We cannot automatically switch licenses when Ruby changes.
|
47
|
+
s.licenses = ['GPL-2.0+', 'Ruby-1.8']
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,275 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: unicorn-maintained
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 6.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- unicorn hackers
|
8
|
+
bindir: bin
|
9
|
+
cert_chain: []
|
10
|
+
date: 2024-03-19 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: rack
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0'
|
19
|
+
type: :development
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: raindrops-maintained
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0.21'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.21'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: test-unit
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.0'
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.0'
|
54
|
+
description: |-
|
55
|
+
unicorn is an HTTP server for Rack applications that has done
|
56
|
+
decades of damage to the entire Ruby ecosystem due to its ability
|
57
|
+
to tolerate (and thus encourage) bad code. It is only designed
|
58
|
+
to handle fast clients on low-latency, high-bandwidth connections
|
59
|
+
and take advantage of features in Unix/Unix-like kernels.
|
60
|
+
Slow clients must only be served by placing a reverse proxy capable of
|
61
|
+
fully buffering both the the request and response in between unicorn
|
62
|
+
and slow clients.
|
63
|
+
email: unicorn-public@yhbt.net
|
64
|
+
executables:
|
65
|
+
- unicorn
|
66
|
+
- unicorn_rails
|
67
|
+
extensions:
|
68
|
+
- ext/unicorn_http/extconf.rb
|
69
|
+
extra_rdoc_files:
|
70
|
+
- FAQ
|
71
|
+
- README
|
72
|
+
- TUNING
|
73
|
+
- PHILOSOPHY
|
74
|
+
- HACKING
|
75
|
+
- DESIGN
|
76
|
+
- CONTRIBUTORS
|
77
|
+
- LICENSE
|
78
|
+
- SIGNALS
|
79
|
+
- KNOWN_ISSUES
|
80
|
+
- TODO
|
81
|
+
- NEWS
|
82
|
+
- LATEST
|
83
|
+
- lib/unicorn.rb
|
84
|
+
- lib/unicorn/configurator.rb
|
85
|
+
- lib/unicorn/http_server.rb
|
86
|
+
- lib/unicorn/preread_input.rb
|
87
|
+
- lib/unicorn/stream_input.rb
|
88
|
+
- lib/unicorn/tee_input.rb
|
89
|
+
- lib/unicorn/util.rb
|
90
|
+
- lib/unicorn/oob_gc.rb
|
91
|
+
- lib/unicorn/worker.rb
|
92
|
+
- ISSUES
|
93
|
+
- Sandbox
|
94
|
+
- Links
|
95
|
+
- Application_Timeouts
|
96
|
+
files:
|
97
|
+
- ".CHANGELOG.old"
|
98
|
+
- ".document"
|
99
|
+
- ".gitattributes"
|
100
|
+
- ".gitignore"
|
101
|
+
- ".mailmap"
|
102
|
+
- ".manifest"
|
103
|
+
- ".olddoc.yml"
|
104
|
+
- Application_Timeouts
|
105
|
+
- CONTRIBUTORS
|
106
|
+
- COPYING
|
107
|
+
- DESIGN
|
108
|
+
- Documentation/.gitignore
|
109
|
+
- Documentation/unicorn.1
|
110
|
+
- Documentation/unicorn_rails.1
|
111
|
+
- FAQ
|
112
|
+
- GIT-VERSION-FILE
|
113
|
+
- GIT-VERSION-GEN
|
114
|
+
- GNUmakefile
|
115
|
+
- HACKING
|
116
|
+
- ISSUES
|
117
|
+
- KNOWN_ISSUES
|
118
|
+
- LATEST
|
119
|
+
- LICENSE
|
120
|
+
- Links
|
121
|
+
- NEWS
|
122
|
+
- PHILOSOPHY
|
123
|
+
- README
|
124
|
+
- Rakefile
|
125
|
+
- SIGNALS
|
126
|
+
- Sandbox
|
127
|
+
- TODO
|
128
|
+
- TUNING
|
129
|
+
- archive/.gitignore
|
130
|
+
- archive/slrnpull.conf
|
131
|
+
- bin/unicorn
|
132
|
+
- bin/unicorn_rails
|
133
|
+
- examples/big_app_gc.rb
|
134
|
+
- examples/echo.ru
|
135
|
+
- examples/init.sh
|
136
|
+
- examples/logger_mp_safe.rb
|
137
|
+
- examples/logrotate.conf
|
138
|
+
- examples/nginx.conf
|
139
|
+
- examples/unicorn.conf.minimal.rb
|
140
|
+
- examples/unicorn.conf.rb
|
141
|
+
- examples/unicorn.socket
|
142
|
+
- examples/unicorn@.service
|
143
|
+
- ext/unicorn_http/CFLAGS
|
144
|
+
- ext/unicorn_http/c_util.h
|
145
|
+
- ext/unicorn_http/common_field_optimization.h
|
146
|
+
- ext/unicorn_http/epollexclusive.h
|
147
|
+
- ext/unicorn_http/ext_help.h
|
148
|
+
- ext/unicorn_http/extconf.rb
|
149
|
+
- ext/unicorn_http/global_variables.h
|
150
|
+
- ext/unicorn_http/httpdate.c
|
151
|
+
- ext/unicorn_http/unicorn_http.c
|
152
|
+
- ext/unicorn_http/unicorn_http.rl
|
153
|
+
- ext/unicorn_http/unicorn_http_common.rl
|
154
|
+
- lib/unicorn.rb
|
155
|
+
- lib/unicorn/app/old_rails.rb
|
156
|
+
- lib/unicorn/app/old_rails/static.rb
|
157
|
+
- lib/unicorn/cgi_wrapper.rb
|
158
|
+
- lib/unicorn/configurator.rb
|
159
|
+
- lib/unicorn/const.rb
|
160
|
+
- lib/unicorn/http_request.rb
|
161
|
+
- lib/unicorn/http_response.rb
|
162
|
+
- lib/unicorn/http_server.rb
|
163
|
+
- lib/unicorn/launcher.rb
|
164
|
+
- lib/unicorn/oob_gc.rb
|
165
|
+
- lib/unicorn/preread_input.rb
|
166
|
+
- lib/unicorn/select_waiter.rb
|
167
|
+
- lib/unicorn/socket_helper.rb
|
168
|
+
- lib/unicorn/stream_input.rb
|
169
|
+
- lib/unicorn/tee_input.rb
|
170
|
+
- lib/unicorn/tmpio.rb
|
171
|
+
- lib/unicorn/util.rb
|
172
|
+
- lib/unicorn/version.rb
|
173
|
+
- lib/unicorn/worker.rb
|
174
|
+
- man/man1/unicorn.1
|
175
|
+
- man/man1/unicorn_rails.1
|
176
|
+
- setup.rb
|
177
|
+
- t/.gitignore
|
178
|
+
- t/GNUmakefile
|
179
|
+
- t/README
|
180
|
+
- t/active-unix-socket.t
|
181
|
+
- t/bin/unused_listen
|
182
|
+
- t/broken-app.ru
|
183
|
+
- t/client_body_buffer_size.ru
|
184
|
+
- t/client_body_buffer_size.t
|
185
|
+
- t/detach.ru
|
186
|
+
- t/env.ru
|
187
|
+
- t/fails-rack-lint.ru
|
188
|
+
- t/heartbeat-timeout.ru
|
189
|
+
- t/heartbeat-timeout.t
|
190
|
+
- t/integration.ru
|
191
|
+
- t/integration.t
|
192
|
+
- t/lib.perl
|
193
|
+
- t/listener_names.ru
|
194
|
+
- t/my-tap-lib.sh
|
195
|
+
- t/oob_gc.ru
|
196
|
+
- t/oob_gc_path.ru
|
197
|
+
- t/pid.ru
|
198
|
+
- t/preread_input.ru
|
199
|
+
- t/reload-bad-config.t
|
200
|
+
- t/reopen-logs.ru
|
201
|
+
- t/reopen-logs.t
|
202
|
+
- t/t0008-back_out_of_upgrade.sh
|
203
|
+
- t/t0009-broken-app.sh
|
204
|
+
- t/t0010-reap-logging.sh
|
205
|
+
- t/t0012-reload-empty-config.sh
|
206
|
+
- t/t0013-rewindable-input-false.sh
|
207
|
+
- t/t0013.ru
|
208
|
+
- t/t0014-rewindable-input-true.sh
|
209
|
+
- t/t0014.ru
|
210
|
+
- t/t0015-configurator-internals.sh
|
211
|
+
- t/t0020-at_exit-handler.sh
|
212
|
+
- t/t0021-process_detach.sh
|
213
|
+
- t/t0022-listener_names-preload_app.sh
|
214
|
+
- t/t0300-no-default-middleware.sh
|
215
|
+
- t/t0301-no-default-middleware-ignored-in-config.sh
|
216
|
+
- t/t0301.ru
|
217
|
+
- t/t9001-oob_gc.sh
|
218
|
+
- t/t9002-oob_gc-path.sh
|
219
|
+
- t/test-lib.sh
|
220
|
+
- t/winch_ttin.t
|
221
|
+
- t/working_directory.t
|
222
|
+
- test/aggregate.rb
|
223
|
+
- test/benchmark/README
|
224
|
+
- test/benchmark/dd.ru
|
225
|
+
- test/benchmark/ddstream.ru
|
226
|
+
- test/benchmark/readinput.ru
|
227
|
+
- test/benchmark/stack.ru
|
228
|
+
- test/benchmark/uconnect.perl
|
229
|
+
- test/exec/README
|
230
|
+
- test/exec/test_exec.rb
|
231
|
+
- test/test_helper.rb
|
232
|
+
- test/unit/test_ccc.rb
|
233
|
+
- test/unit/test_configurator.rb
|
234
|
+
- test/unit/test_droplet.rb
|
235
|
+
- test/unit/test_http_parser.rb
|
236
|
+
- test/unit/test_http_parser_ng.rb
|
237
|
+
- test/unit/test_request.rb
|
238
|
+
- test/unit/test_server.rb
|
239
|
+
- test/unit/test_signals.rb
|
240
|
+
- test/unit/test_socket_helper.rb
|
241
|
+
- test/unit/test_stream_input.rb
|
242
|
+
- test/unit/test_tee_input.rb
|
243
|
+
- test/unit/test_util.rb
|
244
|
+
- test/unit/test_waiter.rb
|
245
|
+
- unicorn.gemspec
|
246
|
+
homepage: https://yhbt.net/unicorn/
|
247
|
+
licenses:
|
248
|
+
- GPL-2.0+
|
249
|
+
- Ruby-1.8
|
250
|
+
metadata: {}
|
251
|
+
rdoc_options: []
|
252
|
+
require_paths:
|
253
|
+
- lib
|
254
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - ">="
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: 2.5.0
|
259
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
260
|
+
requirements:
|
261
|
+
- - ">="
|
262
|
+
- !ruby/object:Gem::Version
|
263
|
+
version: '0'
|
264
|
+
requirements: []
|
265
|
+
rubygems_version: 3.6.0.dev
|
266
|
+
specification_version: 4
|
267
|
+
summary: Rack HTTP server for fast clients and Unix
|
268
|
+
test_files:
|
269
|
+
- test/unit/test_configurator.rb
|
270
|
+
- test/unit/test_http_parser.rb
|
271
|
+
- test/unit/test_http_parser_ng.rb
|
272
|
+
- test/unit/test_request.rb
|
273
|
+
- test/unit/test_server.rb
|
274
|
+
- test/unit/test_util.rb
|
275
|
+
- test/unit/test_waiter.rb
|