unicorn 0.95.3 → 0.96.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.
- data/Documentation/unicorn.1.txt +5 -6
- data/Documentation/unicorn_rails.1.txt +4 -6
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +2 -2
- data/bin/unicorn +2 -2
- data/bin/unicorn_rails +2 -2
- data/lib/unicorn.rb +19 -2
- data/lib/unicorn/const.rb +1 -1
- data/lib/unicorn/http_request.rb +1 -1
- data/lib/unicorn/http_response.rb +2 -1
- data/lib/unicorn/launcher.rb +32 -6
- data/local.mk.sample +1 -1
- data/test/exec/test_exec.rb +1 -1
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/.gitignore +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/Rakefile +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/app/controllers/application_controller.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/app/controllers/foo_controller.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/app/helpers/application_helper.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/config/boot.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/config/database.yml +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/config/environment.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/config/environments/development.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/config/environments/production.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/config/routes.rb +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/db/.gitignore +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/public/404.html +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/public/500.html +0 -0
- data/test/rails/{app-2.3.3.1 → app-2.3.5}/public/x.txt +0 -0
- data/test/unit/test_server.rb +10 -0
- metadata +18 -18
data/Documentation/unicorn.1.txt
CHANGED
@@ -13,8 +13,8 @@ unicorn [-c CONFIG_FILE] [-E RACK_ENV] [-D] [RACKUP_FILE]
|
|
13
13
|
# DESCRIPTION
|
14
14
|
|
15
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
|
-
"
|
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
18
|
|
19
19
|
While Unicorn takes a myriad of command-line options for
|
20
20
|
compatibility with ruby(1) and rackup(1), it is recommended to stick
|
@@ -33,10 +33,9 @@ with rackup(1) but strongly discouraged.
|
|
33
33
|
# UNICORN OPTIONS
|
34
34
|
-c, \--config-file CONFIG_FILE
|
35
35
|
: Path to the Unicorn-specific config file. The config file is
|
36
|
-
implemented as a Ruby DSL, so Ruby code may executed
|
37
|
-
|
38
|
-
|
39
|
-
directives available from the DSL.
|
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.
|
40
39
|
|
41
40
|
-D, \--daemonize
|
42
41
|
: Run daemonized in the background. The process is detached from
|
@@ -14,8 +14,7 @@ unicorn_rails [-c CONFIG_FILE] [-E RAILS_ENV] [-D] [RACKUP_FILE]
|
|
14
14
|
|
15
15
|
A rackup(1)-like command to launch Rails applications using Unicorn. It
|
16
16
|
is expected to be started in your Rails application root (RAILS_ROOT),
|
17
|
-
but "
|
18
|
-
optionally, RACKUP_FILE.
|
17
|
+
but the "working_directory" directive may be used in the CONFIG_FILE.
|
19
18
|
|
20
19
|
The outward interface resembles rackup(1), the internals and default
|
21
20
|
middleware loading is designed like the `script/server` command
|
@@ -29,10 +28,9 @@ as much as possible.
|
|
29
28
|
# UNICORN OPTIONS
|
30
29
|
-c, \--config-file CONFIG_FILE
|
31
30
|
: Path to the Unicorn-specific config file. The config file is
|
32
|
-
implemented as a Ruby DSL, so Ruby code may executed
|
33
|
-
|
34
|
-
|
35
|
-
directives available from the DSL.
|
31
|
+
implemented as a Ruby DSL, so Ruby code may executed.
|
32
|
+
See the RDoc/ri for the *Unicorn::Configurator* class for the
|
33
|
+
full list of directives available from the DSL.
|
36
34
|
|
37
35
|
-D, \--daemonize
|
38
36
|
: Run daemonized in the background. The process is detached from
|
data/GIT-VERSION-GEN
CHANGED
data/GNUmakefile
CHANGED
@@ -159,11 +159,11 @@ manifest: $(pkg_extra) man
|
|
159
159
|
cmp $@+ $@ || mv $@+ $@
|
160
160
|
$(RM) $@+
|
161
161
|
|
162
|
-
NEWS: GIT-VERSION-FILE
|
162
|
+
NEWS: GIT-VERSION-FILE .manifest
|
163
163
|
$(RAKE) -s news_rdoc > $@+
|
164
164
|
mv $@+ $@
|
165
165
|
|
166
|
-
SINCE = 0.
|
166
|
+
SINCE = 0.95.0
|
167
167
|
ChangeLog: LOG_VERSION = \
|
168
168
|
$(shell git rev-parse -q "$(GIT_VERSION)" >/dev/null 2>&1 && \
|
169
169
|
echo $(GIT_VERSION) || git describe)
|
data/bin/unicorn
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/
|
1
|
+
#!/this/will/be/overwritten/or/wrapped/anyways/do/not/worry/ruby
|
2
2
|
# -*- encoding: binary -*-
|
3
3
|
require 'unicorn/launcher'
|
4
4
|
require 'optparse'
|
@@ -161,5 +161,5 @@ if $DEBUG
|
|
161
161
|
})
|
162
162
|
end
|
163
163
|
|
164
|
-
Unicorn::Launcher.daemonize! if daemonize
|
164
|
+
Unicorn::Launcher.daemonize!(options) if daemonize
|
165
165
|
Unicorn.run(app, options)
|
data/bin/unicorn_rails
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/
|
1
|
+
#!/this/will/be/overwritten/or/wrapped/anyways/do/not/worry/ruby
|
2
2
|
# -*- encoding: binary -*-
|
3
3
|
require 'unicorn/launcher'
|
4
4
|
require 'optparse'
|
@@ -202,6 +202,6 @@ end
|
|
202
202
|
|
203
203
|
if daemonize
|
204
204
|
options[:pid] = rails_pid
|
205
|
-
Unicorn::Launcher.daemonize!
|
205
|
+
Unicorn::Launcher.daemonize!(options)
|
206
206
|
end
|
207
207
|
Unicorn.run(app, options)
|
data/lib/unicorn.rb
CHANGED
@@ -38,7 +38,7 @@ module Unicorn
|
|
38
38
|
:before_fork, :after_fork, :before_exec,
|
39
39
|
:logger, :pid, :app, :preload_app,
|
40
40
|
:reexec_pid, :orig_app, :init_listeners,
|
41
|
-
:master_pid, :config)
|
41
|
+
:master_pid, :config, :ready_pipe)
|
42
42
|
include ::Unicorn::SocketHelper
|
43
43
|
|
44
44
|
# prevents IO objects in here from being GC-ed
|
@@ -162,6 +162,7 @@ module Unicorn
|
|
162
162
|
def initialize(app, options = {})
|
163
163
|
self.app = app
|
164
164
|
self.reexec_pid = 0
|
165
|
+
self.ready_pipe = options.delete(:ready_pipe)
|
165
166
|
self.init_listeners = options[:listeners] ? options[:listeners].dup : []
|
166
167
|
self.config = Configurator.new(options.merge(:use_defaults => true))
|
167
168
|
self.listener_opts = {}
|
@@ -249,6 +250,10 @@ module Unicorn
|
|
249
250
|
def stdout_path=(path); redirect_io($stdout, path); end
|
250
251
|
def stderr_path=(path); redirect_io($stderr, path); end
|
251
252
|
|
253
|
+
def logger=(obj)
|
254
|
+
HttpRequest::DEFAULTS["rack.logger"] = super
|
255
|
+
end
|
256
|
+
|
252
257
|
# sets the path for the PID file of the master process
|
253
258
|
def pid=(path)
|
254
259
|
if path
|
@@ -306,6 +311,9 @@ module Unicorn
|
|
306
311
|
"(#{tries < 0 ? 'infinite' : tries} tries left)"
|
307
312
|
sleep(delay)
|
308
313
|
retry
|
314
|
+
rescue => err
|
315
|
+
logger.fatal "error adding listener addr=#{address}"
|
316
|
+
raise err
|
309
317
|
end
|
310
318
|
end
|
311
319
|
|
@@ -324,6 +332,11 @@ module Unicorn
|
|
324
332
|
trap(:CHLD) { |sig_nr| awaken_master }
|
325
333
|
proc_name 'master'
|
326
334
|
logger.info "master process ready" # test_exec.rb relies on this message
|
335
|
+
if ready_pipe
|
336
|
+
ready_pipe.syswrite($$.to_s)
|
337
|
+
ready_pipe.close rescue nil
|
338
|
+
self.ready_pipe = nil
|
339
|
+
end
|
327
340
|
begin
|
328
341
|
loop do
|
329
342
|
reap_all_workers
|
@@ -528,7 +541,11 @@ module Unicorn
|
|
528
541
|
WORKERS.values.include?(worker_nr) and next
|
529
542
|
worker = Worker.new(worker_nr, Unicorn::Util.tmpio)
|
530
543
|
before_fork.call(self, worker)
|
531
|
-
WORKERS[fork {
|
544
|
+
WORKERS[fork {
|
545
|
+
ready_pipe.close if ready_pipe
|
546
|
+
self.ready_pipe = nil
|
547
|
+
worker_loop(worker)
|
548
|
+
}] = worker
|
532
549
|
end
|
533
550
|
end
|
534
551
|
|
data/lib/unicorn/const.rb
CHANGED
@@ -7,7 +7,7 @@ module Unicorn
|
|
7
7
|
# gave about a 3% to 10% performance improvement over using the strings directly.
|
8
8
|
# Symbols did not really improve things much compared to constants.
|
9
9
|
module Const
|
10
|
-
UNICORN_VERSION="0.
|
10
|
+
UNICORN_VERSION="0.96.0"
|
11
11
|
|
12
12
|
DEFAULT_HOST = "0.0.0.0" # default TCP listen host address
|
13
13
|
DEFAULT_PORT = 8080 # default TCP listen port
|
data/lib/unicorn/http_request.rb
CHANGED
@@ -47,7 +47,8 @@ module Unicorn
|
|
47
47
|
headers.each do |key, value|
|
48
48
|
next if SKIP.include?(key.downcase)
|
49
49
|
if value =~ /\n/
|
50
|
-
|
50
|
+
# avoiding blank, key-only cookies with /\n+/
|
51
|
+
out.concat(value.split(/\n+/).map! { |v| "#{key}: #{v}\r\n" })
|
51
52
|
else
|
52
53
|
out << "#{key}: #{value}\r\n"
|
53
54
|
end
|
data/lib/unicorn/launcher.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
|
3
|
-
$
|
3
|
+
$stdout.sync = $stderr.sync = true
|
4
4
|
$stdin.binmode
|
5
5
|
$stdout.binmode
|
6
6
|
$stderr.binmode
|
@@ -19,21 +19,47 @@ class Unicorn::Launcher
|
|
19
19
|
# the directory it was started in when being re-executed
|
20
20
|
# to pickup code changes if the original deployment directory
|
21
21
|
# is a symlink or otherwise got replaced.
|
22
|
-
def self.daemonize!
|
22
|
+
def self.daemonize!(options = nil)
|
23
23
|
$stdin.reopen("/dev/null")
|
24
24
|
|
25
25
|
# We only start a new process group if we're not being reexecuted
|
26
26
|
# and inheriting file descriptors from our parent
|
27
27
|
unless ENV['UNICORN_FD']
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
if options
|
29
|
+
# grandparent - reads pipe, exits when master is ready
|
30
|
+
# \_ parent - exits immediately ASAP
|
31
|
+
# \_ unicorn master - writes to pipe when ready
|
31
32
|
|
33
|
+
rd, wr = IO.pipe
|
34
|
+
grandparent = $$
|
35
|
+
if fork
|
36
|
+
wr.close # grandparent does not write
|
37
|
+
else
|
38
|
+
rd.close # unicorn master does not read
|
39
|
+
Process.setsid
|
40
|
+
exit if fork # parent dies now
|
41
|
+
end
|
42
|
+
|
43
|
+
if grandparent == $$
|
44
|
+
# this will block until HttpServer#join runs (or it dies)
|
45
|
+
master_pid = (rd.readpartial(16) rescue nil).to_i
|
46
|
+
unless master_pid > 1
|
47
|
+
warn "master failed to start, check stderr log for details"
|
48
|
+
exit!(1)
|
49
|
+
end
|
50
|
+
exit 0
|
51
|
+
else # unicorn master process
|
52
|
+
options[:ready_pipe] = wr
|
53
|
+
end
|
54
|
+
else # backwards compat
|
55
|
+
exit if fork
|
56
|
+
Process.setsid
|
57
|
+
exit if fork
|
58
|
+
end
|
32
59
|
# $stderr/$stderr can/will be redirected separately in the Unicorn config
|
33
60
|
Unicorn::Configurator::DEFAULTS[:stderr_path] = "/dev/null"
|
34
61
|
Unicorn::Configurator::DEFAULTS[:stdout_path] = "/dev/null"
|
35
62
|
end
|
36
|
-
$stdin.sync = $stdout.sync = $stderr.sync = true
|
37
63
|
end
|
38
64
|
|
39
65
|
end
|
data/local.mk.sample
CHANGED
data/test/exec/test_exec.rb
CHANGED
@@ -805,7 +805,7 @@ EOF
|
|
805
805
|
exec($unicorn_bin, "-D", "-l#{@addr}:#{@port}", "-c#{ucfg.path}")
|
806
806
|
end
|
807
807
|
pid, status = Process.waitpid2(pid)
|
808
|
-
assert status.success?, "original process exited successfully"
|
808
|
+
assert ! status.success?, "original process exited successfully"
|
809
809
|
sleep 1 # can't waitpid on a daemonized process :<
|
810
810
|
assert err.stat.size > 0
|
811
811
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/test/unit/test_server.rb
CHANGED
@@ -228,6 +228,16 @@ class WebServerTest < Test::Unit::TestCase
|
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
231
|
+
def test_logger_set
|
232
|
+
assert_equal @server.logger, Unicorn::HttpRequest::DEFAULTS["rack.logger"]
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_logger_changed
|
236
|
+
tmp = Logger.new($stdout)
|
237
|
+
@server.logger = tmp
|
238
|
+
assert_equal tmp, Unicorn::HttpRequest::DEFAULTS["rack.logger"]
|
239
|
+
end
|
240
|
+
|
231
241
|
def test_bad_client_400
|
232
242
|
sock = nil
|
233
243
|
assert_nothing_raised do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unicorn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.96.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Unicorn hackers
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-08 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -191,22 +191,22 @@ files:
|
|
191
191
|
- test/rails/app-2.2.2/log/.gitignore
|
192
192
|
- test/rails/app-2.2.2/public/404.html
|
193
193
|
- test/rails/app-2.2.2/public/500.html
|
194
|
-
- test/rails/app-2.3.
|
195
|
-
- test/rails/app-2.3.
|
196
|
-
- test/rails/app-2.3.
|
197
|
-
- test/rails/app-2.3.
|
198
|
-
- test/rails/app-2.3.
|
199
|
-
- test/rails/app-2.3.
|
200
|
-
- test/rails/app-2.3.
|
201
|
-
- test/rails/app-2.3.
|
202
|
-
- test/rails/app-2.3.
|
203
|
-
- test/rails/app-2.3.
|
204
|
-
- test/rails/app-2.3.
|
205
|
-
- test/rails/app-2.3.
|
206
|
-
- test/rails/app-2.3.
|
207
|
-
- test/rails/app-2.3.
|
208
|
-
- test/rails/app-2.3.
|
209
|
-
- test/rails/app-2.3.
|
194
|
+
- test/rails/app-2.3.5/.gitignore
|
195
|
+
- test/rails/app-2.3.5/Rakefile
|
196
|
+
- test/rails/app-2.3.5/app/controllers/application_controller.rb
|
197
|
+
- test/rails/app-2.3.5/app/controllers/foo_controller.rb
|
198
|
+
- test/rails/app-2.3.5/app/helpers/application_helper.rb
|
199
|
+
- test/rails/app-2.3.5/config/boot.rb
|
200
|
+
- test/rails/app-2.3.5/config/database.yml
|
201
|
+
- test/rails/app-2.3.5/config/environment.rb
|
202
|
+
- test/rails/app-2.3.5/config/environments/development.rb
|
203
|
+
- test/rails/app-2.3.5/config/environments/production.rb
|
204
|
+
- test/rails/app-2.3.5/config/routes.rb
|
205
|
+
- test/rails/app-2.3.5/db/.gitignore
|
206
|
+
- test/rails/app-2.3.5/log/.gitignore
|
207
|
+
- test/rails/app-2.3.5/public/404.html
|
208
|
+
- test/rails/app-2.3.5/public/500.html
|
209
|
+
- test/rails/app-2.3.5/public/x.txt
|
210
210
|
- test/rails/test_rails.rb
|
211
211
|
- test/test_helper.rb
|
212
212
|
- test/unit/test_configurator.rb
|