unicorn 5.5.1 → 5.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,6 +23,16 @@ def call(env)
23
23
  end
24
24
  end
25
25
 
26
+ class TestEarlyHintsHandler
27
+ def call(env)
28
+ while env['rack.input'].read(4096)
29
+ end
30
+ env['rack.early_hints'].call(
31
+ "Link" => "</style.css>; rel=preload; as=style\n</script.js>; rel=preload"
32
+ )
33
+ [200, { 'Content-Type' => 'text/plain' }, ['hello!\n']]
34
+ end
35
+ end
26
36
 
27
37
  class WebServerTest < Test::Unit::TestCase
28
38
 
@@ -84,6 +94,26 @@ def test_preload_app_config
84
94
  tmp.close!
85
95
  end
86
96
 
97
+ def test_early_hints
98
+ teardown
99
+ redirect_test_io do
100
+ @server = HttpServer.new(TestEarlyHintsHandler.new,
101
+ :listeners => [ "127.0.0.1:#@port"],
102
+ :early_hints => true)
103
+ @server.start
104
+ end
105
+
106
+ sock = TCPSocket.new('127.0.0.1', @port)
107
+ sock.syswrite("GET / HTTP/1.0\r\n\r\n")
108
+
109
+ responses = sock.read(4096)
110
+ assert_match %r{\AHTTP/1.[01] 103\b}, responses
111
+ assert_match %r{^Link: </style\.css>}, responses
112
+ assert_match %r{^Link: </script\.js>}, responses
113
+
114
+ assert_match %r{^HTTP/1.[01] 200\b}, responses
115
+ end
116
+
87
117
  def test_broken_app
88
118
  teardown
89
119
  app = lambda { |env| raise RuntimeError, "hello" }
@@ -236,15 +236,10 @@ def test_chunked_upload_via_curl
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
@@ -114,7 +114,7 @@ def test_pipe
114
114
  f_getpipe_sz = 1032
115
115
  IO.pipe do |a, b|
116
116
  a_sz = a.fcntl(f_getpipe_sz)
117
- b_sz = b.fcntl(f_getpipe_sz)
117
+ b.fcntl(f_getpipe_sz)
118
118
  assert_kind_of Integer, a_sz
119
119
  r_sz = r.fcntl(f_getpipe_sz)
120
120
  assert_equal Raindrops::PAGE_SIZE, r_sz
@@ -11,18 +11,18 @@
11
11
 
12
12
  Gem::Specification.new do |s|
13
13
  s.name = %q{unicorn}
14
- s.version = (ENV['VERSION'] || '5.5.0').dup
14
+ s.version = (ENV['VERSION'] || '5.6.0').dup
15
15
  s.authors = ['unicorn hackers']
16
16
  s.summary = 'Rack HTTP server for fast clients and Unix'
17
17
  s.description = File.read('README').split("\n\n")[1]
18
- s.email = %q{unicorn-public@bogomips.org}
18
+ s.email = %q{unicorn-public@yhbt.net}
19
19
  s.executables = %w(unicorn unicorn_rails)
20
20
  s.extensions = %w(ext/unicorn_http/extconf.rb)
21
21
  s.extra_rdoc_files = IO.readlines('.document').map!(&:chomp!).keep_if do |f|
22
22
  File.exist?(f)
23
23
  end
24
24
  s.files = manifest
25
- s.homepage = 'https://bogomips.org/unicorn/'
25
+ s.homepage = 'https://yhbt.net/unicorn/'
26
26
  s.test_files = test_files
27
27
 
28
28
  # technically we need ">= 1.9.3", too, but avoid the array here since
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: 5.5.1
4
+ version: 5.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - unicorn hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-06 00:00:00.000000000 Z
11
+ date: 2020-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -72,7 +72,7 @@ description: |-
72
72
  advantage of features in Unix/Unix-like kernels. Slow clients should
73
73
  only be served by placing a reverse proxy capable of fully buffering
74
74
  both the the request and response in between unicorn and slow clients.
75
- email: unicorn-public@bogomips.org
75
+ email: unicorn-public@yhbt.net
76
76
  executables:
77
77
  - unicorn
78
78
  - unicorn_rails
@@ -120,9 +120,8 @@ files:
120
120
  - COPYING
121
121
  - DESIGN
122
122
  - Documentation/.gitignore
123
- - Documentation/GNUmakefile
124
- - Documentation/unicorn.1.txt
125
- - Documentation/unicorn_rails.1.txt
123
+ - Documentation/unicorn.1
124
+ - Documentation/unicorn_rails.1
126
125
  - FAQ
127
126
  - GIT-VERSION-FILE
128
127
  - GIT-VERSION-GEN
@@ -248,7 +247,10 @@ files:
248
247
  - test/aggregate.rb
249
248
  - test/benchmark/README
250
249
  - test/benchmark/dd.ru
250
+ - test/benchmark/ddstream.ru
251
+ - test/benchmark/readinput.ru
251
252
  - test/benchmark/stack.ru
253
+ - test/benchmark/uconnect.perl
252
254
  - test/exec/README
253
255
  - test/exec/test_exec.rb
254
256
  - test/test_helper.rb
@@ -269,7 +271,7 @@ files:
269
271
  - unicorn.gemspec
270
272
  - unicorn_1
271
273
  - unicorn_rails_1
272
- homepage: https://bogomips.org/unicorn/
274
+ homepage: https://yhbt.net/unicorn/
273
275
  licenses:
274
276
  - GPL-2.0+
275
277
  - Ruby-1.8
@@ -299,4 +301,5 @@ test_files:
299
301
  - test/unit/test_http_parser_ng.rb
300
302
  - test/unit/test_request.rb
301
303
  - test/unit/test_server.rb
304
+ - test/unit/test_upload.rb
302
305
  - test/unit/test_util.rb
@@ -1,30 +0,0 @@
1
- all::
2
-
3
- PANDOC = pandoc
4
- PANDOC_OPTS = -f markdown --email-obfuscation=none
5
- pandoc = $(PANDOC) $(PANDOC_OPTS)
6
- pandoc_html = $(pandoc) --toc -t html --no-wrap
7
-
8
- man1 := $(addsuffix .1,unicorn unicorn_rails)
9
- html1 := $(addsuffix .html,$(man1))
10
-
11
- all:: html man
12
-
13
- html: $(html1)
14
- man: $(man1)
15
-
16
- install-html: html
17
- mkdir -p ../doc/man1
18
- install -m 644 $(html1) ../doc/man1
19
-
20
- install-man: man
21
- mkdir -p ../man/man1
22
- install -m 644 $(man1) ../man/man1
23
-
24
- %.1: %.1.txt
25
- $(pandoc) -s -t man < $< > $@+ && mv $@+ $@
26
- %.1.html: %.1.txt
27
- $(pandoc_html) < $< > $@+ && mv $@+ $@
28
-
29
- clean::
30
- $(RM) $(man1) $(html1)
@@ -1,187 +0,0 @@
1
- % UNICORN(1) Unicorn User Manual
2
- % The Unicorn Community <unicorn-public@bogomips.org>
3
- % September 15, 2009
4
-
5
- # NAME
6
-
7
- unicorn - a rackup-like command to launch the Unicorn HTTP server
8
-
9
- # SYNOPSIS
10
-
11
- unicorn [-c CONFIG_FILE] [-E RACK_ENV] [-D] [RACKUP_FILE]
12
-
13
- # DESCRIPTION
14
-
15
- A rackup(1)-like command to launch Rack applications using Unicorn.
16
- It is expected to be started in your application root (APP_ROOT),
17
- but the "working_directory" directive may be used in the CONFIG_FILE.
18
-
19
- While unicorn takes a myriad of command-line options for
20
- compatibility with ruby(1) and rackup(1), it is recommended to stick
21
- to the few command-line options specified in the SYNOPSIS and use
22
- the CONFIG_FILE as much as possible.
23
-
24
- # RACKUP FILE
25
-
26
- This defaults to \"config.ru\" in APP_ROOT. It should be the same
27
- file used by rackup(1) and other Rack launchers, it uses the
28
- *Rack::Builder* DSL.
29
-
30
- Embedded command-line options are mostly parsed for compatibility
31
- with rackup(1) but strongly discouraged.
32
-
33
- # UNICORN OPTIONS
34
- -c, \--config-file CONFIG_FILE
35
- : Path to the Unicorn-specific config file. The config file is
36
- implemented as a Ruby DSL, so Ruby code may executed.
37
- See the RDoc/ri for the *Unicorn::Configurator* class for the full
38
- list of directives available from the DSL.
39
- Using an absolute path for for CONFIG_FILE is recommended as it
40
- makes multiple instances of Unicorn easily distinguishable when
41
- viewing ps(1) output.
42
-
43
- -D, \--daemonize
44
- : Run daemonized in the background. The process is detached from
45
- the controlling terminal and stdin is redirected to "/dev/null".
46
- Unlike many common UNIX daemons, we do not chdir to \"/\"
47
- upon daemonization to allow more control over the startup/upgrade
48
- process.
49
- Unless specified in the CONFIG_FILE, stderr and stdout will
50
- also be redirected to "/dev/null".
51
-
52
- -E, \--env RACK_ENV
53
- : Run under the given RACK_ENV. See the RACK ENVIRONMENT section
54
- for more details.
55
-
56
- -l, \--listen ADDRESS
57
- : Listens on a given ADDRESS. ADDRESS may be in the form of
58
- HOST:PORT or PATH, HOST:PORT is taken to mean a TCP socket
59
- and PATH is meant to be a path to a UNIX domain socket.
60
- Defaults to "0.0.0.0:8080" (all addresses on TCP port 8080)
61
- For production deployments, specifying the "listen" directive in
62
- CONFIG_FILE is recommended as it allows fine-tuning of socket
63
- options.
64
- -N, \--no-default-middleware
65
- : Disables loading middleware implied by RACK_ENV. This bypasses the
66
- configuration documented in the RACK ENVIRONMENT section, but still
67
- allows RACK_ENV to be used for application/framework-specific purposes.
68
-
69
- # RACKUP COMPATIBILITY OPTIONS
70
- -o, \--host HOST
71
- : Listen on a TCP socket belonging to HOST, default is
72
- "0.0.0.0" (all addresses).
73
- If specified multiple times on the command-line, only the
74
- last-specified value takes effect.
75
- This option only exists for compatibility with the rackup(1) command,
76
- use of "-l"/"\--listen" switch is recommended instead.
77
-
78
- -p, \--port PORT
79
- : Listen on the specified TCP PORT, default is 8080.
80
- If specified multiple times on the command-line, only the last-specified
81
- value takes effect.
82
- This option only exists for compatibility with the rackup(1) command,
83
- use of "-l"/"\--listen" switch is recommended instead.
84
-
85
- -s, \--server SERVER
86
- : No-op, this exists only for compatibility with rackup(1).
87
-
88
- # RUBY OPTIONS
89
- -e, \--eval LINE
90
- : Evaluate a LINE of Ruby code. This evaluation happens
91
- immediately as the command-line is being parsed.
92
-
93
- -d, \--debug
94
- : Turn on debug mode, the $DEBUG variable is set to true.
95
-
96
- -w, \--warn
97
- : Turn on verbose warnings, the $VERBOSE variable is set to true.
98
-
99
- -I, \--include PATH
100
- : specify $LOAD_PATH. PATH will be prepended to $LOAD_PATH.
101
- The \':\' character may be used to delimit multiple directories.
102
- This directive may be used more than once. Modifications to
103
- $LOAD_PATH take place immediately and in the order they were
104
- specified on the command-line.
105
-
106
- -r, \--require LIBRARY
107
- : require a specified LIBRARY before executing the application. The
108
- \"require\" statement will be executed immediately and in the order
109
- they were specified on the command-line.
110
-
111
- # SIGNALS
112
-
113
- The following UNIX signals may be sent to the master process:
114
-
115
- * HUP - reload config file, app, and gracefully restart all workers
116
- * INT/TERM - quick shutdown, kills all workers immediately
117
- * QUIT - graceful shutdown, waits for workers to finish their
118
- current request before finishing.
119
- * USR1 - reopen all logs owned by the master and all workers
120
- See Unicorn::Util.reopen_logs for what is considered a log.
121
- * USR2 - reexecute the running binary. A separate QUIT
122
- should be sent to the original process once the child is verified to
123
- be up and running.
124
- * WINCH - gracefully stops workers but keep the master running.
125
- This will only work for daemonized processes.
126
- * TTIN - increment the number of worker processes by one
127
- * TTOU - decrement the number of worker processes by one
128
-
129
- See the [SIGNALS][4] document for full description of all signals
130
- used by Unicorn.
131
-
132
- # RACK ENVIRONMENT
133
-
134
- Accepted values of RACK_ENV and the middleware they automatically load
135
- (outside of RACKUP_FILE) are exactly as those in rackup(1):
136
-
137
- * development - loads Rack::CommonLogger, Rack::ShowExceptions, and
138
- Rack::Lint middleware
139
- * deployment - loads Rack::CommonLogger middleware
140
- * none - loads no middleware at all, relying
141
- entirely on RACKUP_FILE
142
-
143
- All unrecognized values for RACK_ENV are assumed to be
144
- "none". Production deployments are strongly encouraged to use
145
- "deployment" or "none" for maximum performance.
146
-
147
- As of Unicorn 0.94.0, RACK_ENV is exported as a process-wide environment
148
- variable as well. While not current a part of the Rack specification as
149
- of Rack 1.0.1, this has become a de facto standard in the Rack world.
150
-
151
- Note the Rack::ContentLength and Rack::Chunked middlewares are also
152
- loaded by "deployment" and "development", but no other values of
153
- RACK_ENV. If needed, they must be individually specified in the
154
- RACKUP_FILE, some frameworks do not require them.
155
-
156
- # ENVIRONMENT VARIABLES
157
-
158
- The RACK_ENV variable is set by the aforementioned \-E switch.
159
- All application or library-specific environment variables (e.g. TMPDIR)
160
- may always be set in the Unicorn CONFIG_FILE in addition to the spawning
161
- shell. When transparently upgrading Unicorn, all environment variables
162
- set in the old master process are inherited by the new master process.
163
- Unicorn only uses (and will overwrite) the UNICORN_FD environment
164
- variable internally when doing transparent upgrades.
165
-
166
- UNICORN_FD is a comma-delimited list of one or more file descriptors
167
- used to implement USR2 upgrades. Init systems may bind listen sockets
168
- itself and spawn unicorn with UNICORN_FD set to the file descriptor
169
- numbers of the listen socket(s).
170
-
171
- As of unicorn 5.0, LISTEN_PID and LISTEN_FDS are used for socket
172
- activation as documented in the sd_listen_fds(3) manpage. Users
173
- relying on this feature do not need to specify a listen socket in
174
- the unicorn config file.
175
-
176
- # SEE ALSO
177
-
178
- * *Rack::Builder* ri/RDoc
179
- * *Unicorn::Configurator* ri/RDoc
180
- * [Unicorn RDoc][1]
181
- * [Rack RDoc][2]
182
- * [Rackup HowTo][3]
183
-
184
- [1]: https://bogomips.org/unicorn/
185
- [2]: https://www.rubydoc.info/github/rack/rack/
186
- [3]: https://github.com/rack/rack/wiki/tutorial-rackup-howto
187
- [4]: https://bogomips.org/unicorn/SIGNALS.html
@@ -1,173 +0,0 @@
1
- % UNICORN_RAILS(1) Unicorn User Manual
2
- % The Unicorn Community <unicorn-public@bogomips.org>
3
- % September 17, 2009
4
-
5
- # NAME
6
-
7
- unicorn_rails - unicorn launcher for Rails 1.x and 2.x users
8
-
9
- # SYNOPSIS
10
-
11
- unicorn_rails [-c CONFIG_FILE] [-E RAILS_ENV] [-D] [RACKUP_FILE]
12
-
13
- # DESCRIPTION
14
-
15
- A rackup(1)-like command to launch ancient Rails (2.x and earlier)
16
- applications using Unicorn. Rails 3 (and later) support Rack natively,
17
- so users are encouraged to use unicorn(1) instead of unicorn_rails(1).
18
-
19
- It is expected to be started in your Rails application root (RAILS_ROOT),
20
- but the "working_directory" directive may be used in the CONFIG_FILE.
21
-
22
- The outward interface resembles rackup(1), the internals and default
23
- middleware loading is designed like the `script/server` command
24
- distributed with Rails.
25
-
26
- While Unicorn takes a myriad of command-line options for compatibility
27
- with ruby(1) and rackup(1), it is recommended to stick to the few
28
- command-line options specified in the SYNOPSIS and use the CONFIG_FILE
29
- as much as possible.
30
-
31
- # UNICORN OPTIONS
32
- -c, \--config-file CONFIG_FILE
33
- : Path to the Unicorn-specific config file. The config file is
34
- implemented as a Ruby DSL, so Ruby code may executed.
35
- See the RDoc/ri for the *Unicorn::Configurator* class for the full
36
- list of directives available from the DSL.
37
- Using an absolute path for for CONFIG_FILE is recommended as it
38
- makes multiple instances of Unicorn easily distinguishable when
39
- viewing ps(1) output.
40
-
41
- -D, \--daemonize
42
- : Run daemonized in the background. The process is detached from
43
- the controlling terminal and stdin is redirected to "/dev/null".
44
- Unlike many common UNIX daemons, we do not chdir to \"/\"
45
- upon daemonization to allow more control over the startup/upgrade
46
- process.
47
- Unless specified in the CONFIG_FILE, stderr and stdout will
48
- also be redirected to "/dev/null".
49
- Daemonization will _skip_ loading of the *Rails::Rack::LogTailer*
50
- middleware under Rails \>\= 2.3.x.
51
- By default, unicorn\_rails(1) will create a PID file in
52
- _\"RAILS\_ROOT/tmp/pids/unicorn.pid\"_. You may override this
53
- by specifying the "pid" directive to override this Unicorn config file.
54
-
55
- -E, \--env RAILS_ENV
56
- : Run under the given RAILS_ENV. This sets the RAILS_ENV environment
57
- variable. Acceptable values are exactly those you expect in your Rails
58
- application, typically "development" or "production".
59
-
60
- -l, \--listen ADDRESS
61
- : Listens on a given ADDRESS. ADDRESS may be in the form of
62
- HOST:PORT or PATH, HOST:PORT is taken to mean a TCP socket
63
- and PATH is meant to be a path to a UNIX domain socket.
64
- Defaults to "0.0.0.0:8080" (all addresses on TCP port 8080).
65
- For production deployments, specifying the "listen" directive in
66
- CONFIG_FILE is recommended as it allows fine-tuning of socket
67
- options.
68
-
69
- # RACKUP COMPATIBILITY OPTIONS
70
- -o, \--host HOST
71
- : Listen on a TCP socket belonging to HOST, default is
72
- "0.0.0.0" (all addresses).
73
- If specified multiple times on the command-line, only the
74
- last-specified value takes effect.
75
- This option only exists for compatibility with the rackup(1) command,
76
- use of "-l"/"\--listen" switch is recommended instead.
77
-
78
- -p, \--port PORT
79
- : Listen on the specified TCP PORT, default is 8080.
80
- If specified multiple times on the command-line, only the last-specified
81
- value takes effect.
82
- This option only exists for compatibility with the rackup(1) command,
83
- use of "-l"/"\--listen" switch is recommended instead.
84
-
85
- \--path PATH
86
- : Mounts the Rails application at the given PATH (instead of "/").
87
- This is equivalent to setting the RAILS_RELATIVE_URL_ROOT
88
- environment variable. This is only supported under Rails 2.3
89
- or later at the moment.
90
-
91
- # RUBY OPTIONS
92
- -e, \--eval LINE
93
- : Evaluate a LINE of Ruby code. This evaluation happens
94
- immediately as the command-line is being parsed.
95
-
96
- -d, \--debug
97
- : Turn on debug mode, the $DEBUG variable is set to true.
98
- For Rails \>\= 2.3.x, this loads the *Rails::Rack::Debugger*
99
- middleware.
100
-
101
- -w, \--warn
102
- : Turn on verbose warnings, the $VERBOSE variable is set to true.
103
-
104
- -I, \--include PATH
105
- : specify $LOAD_PATH. PATH will be prepended to $LOAD_PATH.
106
- The \':\' character may be used to delimit multiple directories.
107
- This directive may be used more than once. Modifications to
108
- $LOAD_PATH take place immediately and in the order they were
109
- specified on the command-line.
110
-
111
- -r, \--require LIBRARY
112
- : require a specified LIBRARY before executing the application. The
113
- \"require\" statement will be executed immediately and in the order
114
- they were specified on the command-line.
115
-
116
- # RACKUP FILE
117
-
118
- This defaults to \"config.ru\" in RAILS_ROOT. It should be the same
119
- file used by rackup(1) and other Rack launchers, it uses the
120
- *Rack::Builder* DSL. Unlike many other Rack applications, RACKUP_FILE
121
- is completely _optional_ for Rails, but may be used to disable some
122
- of the default middleware for performance.
123
-
124
- Embedded command-line options are mostly parsed for compatibility
125
- with rackup(1) but strongly discouraged.
126
-
127
- # ENVIRONMENT VARIABLES
128
-
129
- The RAILS_ENV variable is set by the aforementioned \-E switch. The
130
- RAILS_RELATIVE_URL_ROOT is set by the aforementioned \--path switch.
131
- Either of these variables may also be set in the shell or the Unicorn
132
- CONFIG_FILE. All application or library-specific environment variables
133
- (e.g. TMPDIR, RAILS_ASSET_ID) may always be set in the Unicorn
134
- CONFIG_FILE in addition to the spawning shell. When transparently
135
- upgrading Unicorn, all environment variables set in the old master
136
- process are inherited by the new master process. Unicorn only uses (and
137
- will overwrite) the UNICORN_FD environment variable internally when
138
- doing transparent upgrades.
139
-
140
- # SIGNALS
141
-
142
- The following UNIX signals may be sent to the master process:
143
-
144
- * HUP - reload config file, app, and gracefully restart all workers
145
- * INT/TERM - quick shutdown, kills all workers immediately
146
- * QUIT - graceful shutdown, waits for workers to finish their
147
- current request before finishing.
148
- * USR1 - reopen all logs owned by the master and all workers
149
- See Unicorn::Util.reopen_logs for what is considered a log.
150
- * USR2 - reexecute the running binary. A separate QUIT
151
- should be sent to the original process once the child is verified to
152
- be up and running.
153
- * WINCH - gracefully stops workers but keep the master running.
154
- This will only work for daemonized processes.
155
- * TTIN - increment the number of worker processes by one
156
- * TTOU - decrement the number of worker processes by one
157
-
158
- See the [SIGNALS][4] document for full description of all signals
159
- used by Unicorn.
160
-
161
- # SEE ALSO
162
-
163
- * unicorn(1)
164
- * *Rack::Builder* ri/RDoc
165
- * *Unicorn::Configurator* ri/RDoc
166
- * [Unicorn RDoc][1]
167
- * [Rack RDoc][2]
168
- * [Rackup HowTo][3]
169
-
170
- [1]: https://bogomips.org/unicorn/
171
- [2]: https://www.rubydoc.info/github/rack/rack/
172
- [3]: https://github.com/rack/rack/wiki/tutorial-rackup-howto
173
- [4]: https://bogomips.org/unicorn/SIGNALS.html