unicorn-maintained 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|