unicorn 0.93.3 → 0.93.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTORS +2 -0
- data/DESIGN +16 -0
- data/GIT-VERSION-GEN +1 -1
- data/KNOWN_ISSUES +13 -0
- data/README +2 -2
- data/Rakefile +3 -3
- data/lib/unicorn.rb +5 -8
- data/lib/unicorn/configurator.rb +6 -5
- data/lib/unicorn/const.rb +1 -1
- data/lib/unicorn/tee_input.rb +1 -0
- data/test/unit/test_configurator.rb +4 -2
- data/unicorn.gemspec +4 -0
- metadata +2 -2
data/CONTRIBUTORS
CHANGED
data/DESIGN
CHANGED
@@ -55,6 +55,22 @@
|
|
55
55
|
applications that are running all the time since worker processes
|
56
56
|
will only select()/accept() outside of the application dispatch.
|
57
57
|
|
58
|
+
* Additionally, thundering herds are much smaller than with
|
59
|
+
configurations using existing prefork servers. Process counts should
|
60
|
+
only be scaled to backend resources, _never_ to the number of expected
|
61
|
+
clients like is typical with blocking prefork servers. So while we've
|
62
|
+
seen instances of popular prefork servers configured to run many
|
63
|
+
hundreds of worker processes, Unicorn deployments are typically only
|
64
|
+
2-4 processes per-core.
|
65
|
+
|
66
|
+
* On-demand scaling of worker processes never happens automatically.
|
67
|
+
Again, Unicorn is concerned about scaling to backend limits and should
|
68
|
+
never configured in a fashion where it could be waiting on slow
|
69
|
+
clients. For extremely rare circumstances, we provide TTIN and TTOU
|
70
|
+
signal handlers to increment/decrement your process counts without
|
71
|
+
reloading. Think of it as driving a car with manual transmission:
|
72
|
+
you have a lot more control if you know what you're doing.
|
73
|
+
|
58
74
|
* Blocking I/O is used for clients. This allows a simpler code path
|
59
75
|
to be followed within the Ruby interpreter and fewer syscalls.
|
60
76
|
Applications that use threads continue to work if Unicorn
|
data/GIT-VERSION-GEN
CHANGED
data/KNOWN_ISSUES
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
= Known Issues
|
2
2
|
|
3
|
+
* Rails 2.3.2 bundles its own version of Rack. This may cause subtle
|
4
|
+
bugs when simultaneously loaded with the system-wide Rack Rubygem
|
5
|
+
which Unicorn depends on. Upgrading to Rails 2.3.4 (or later) is
|
6
|
+
strongly recommended for all Rails 2.3.x users for this (and security
|
7
|
+
reasons). Rails 2.2.x series (or before) did not bundle Rack and are
|
8
|
+
should be unnaffected. If there is any reason which forces your
|
9
|
+
application to use Rails 2.3.2 and you have no other choice, then
|
10
|
+
you may edit your Unicorn gemspec and remove the Rack dependency.
|
11
|
+
|
12
|
+
ref: http://mid.gmane.org/20091014221552.GA30624@dcvr.yhbt.net
|
13
|
+
Note: the workaround described in the article above only made
|
14
|
+
the issue more subtle and we didn't notice them immediately.
|
15
|
+
|
3
16
|
* Installing "unicorn" as a system-wide Rubygem and using the
|
4
17
|
{isolate}[http://github.com/jbarnette/isolate] gem may cause issues if
|
5
18
|
you're using any of the bundled application-level libraries in
|
data/README
CHANGED
@@ -143,8 +143,8 @@ regarding this.
|
|
143
143
|
All feedback (bug reports, user/development dicussion, patches, pull
|
144
144
|
requests) go to the mailing list/newsgroup. Patches must be sent inline
|
145
145
|
(git format-patch -M + git send-email). No subscription is necessary
|
146
|
-
to post on the mailing list. No top posting. Address replies +To:+
|
147
|
-
|
146
|
+
to post on the mailing list. No top posting. Address replies +To:+
|
147
|
+
the mailing list.
|
148
148
|
|
149
149
|
* email: mailto:mongrel-unicorn@rubyforge.org
|
150
150
|
* nntp: nntp://news.gmane.org/gmane.comp.lang.ruby.unicorn.general
|
data/Rakefile
CHANGED
@@ -21,8 +21,8 @@ def tags
|
|
21
21
|
body ||= "initial"
|
22
22
|
{
|
23
23
|
:time => Time.at(tagger.split(/ /)[-2].to_i).utc.strftime(timefmt),
|
24
|
-
:tagger_name => %r{^tagger ([^<]+)}.match(tagger)[1],
|
25
|
-
:tagger_email => %r{<([^>]+)>}.match(tagger)[1],
|
24
|
+
:tagger_name => %r{^tagger ([^<]+)}.match(tagger)[1].strip,
|
25
|
+
:tagger_email => %r{<([^>]+)>}.match(tagger)[1].strip,
|
26
26
|
:id => `git rev-parse refs/tags/#{tag}`.chomp!,
|
27
27
|
:tag => tag,
|
28
28
|
:subject => subject,
|
@@ -58,7 +58,7 @@ task :news_atom do
|
|
58
58
|
url = "#{cgit_url}/tag/?id=#{tag[:tag]}"
|
59
59
|
link! :rel => "alternate", :type => "text/html", :href =>url
|
60
60
|
id! url
|
61
|
-
content(:type => 'text'
|
61
|
+
content({:type => 'text'}, tag[:body])
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
data/lib/unicorn.rb
CHANGED
@@ -341,16 +341,13 @@ module Unicorn
|
|
341
341
|
# Terminates all workers, but does not exit master process
|
342
342
|
def stop(graceful = true)
|
343
343
|
self.listeners = []
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
until WORKERS.empty?
|
349
|
-
sleep(step)
|
344
|
+
limit = Time.now + timeout
|
345
|
+
until WORKERS.empty? || Time.now > limit
|
346
|
+
kill_each_worker(graceful ? :QUIT : :TERM)
|
347
|
+
sleep(0.1)
|
350
348
|
reap_all_workers
|
351
|
-
(timeleft -= step) > 0 and next
|
352
|
-
kill_each_worker(:KILL)
|
353
349
|
end
|
350
|
+
kill_each_worker(:KILL)
|
354
351
|
end
|
355
352
|
|
356
353
|
private
|
data/lib/unicorn/configurator.rb
CHANGED
@@ -33,10 +33,11 @@ module Unicorn
|
|
33
33
|
# # will then kill off the old master process with a SIGQUIT.
|
34
34
|
# old_pid = "#{server.config[:pid]}.oldbin"
|
35
35
|
# if old_pid != server.pid
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
36
|
+
# begin
|
37
|
+
# sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
|
38
|
+
# Process.kill(sig, File.read(old_pid).to_i)
|
39
|
+
# rescue Errno::ENOENT, Errno::ESRCH
|
40
|
+
# end
|
40
41
|
# end
|
41
42
|
#
|
42
43
|
# # optionally throttle the master from forking too quickly by sleeping
|
@@ -91,7 +92,7 @@ module Unicorn
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def reload #:nodoc:
|
94
|
-
instance_eval(File.read(config_file)) if config_file
|
95
|
+
instance_eval(File.read(config_file), config_file) if config_file
|
95
96
|
end
|
96
97
|
|
97
98
|
def commit!(server, options = {}) #:nodoc:
|
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.93.
|
10
|
+
UNICORN_VERSION="0.93.4"
|
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/tee_input.rb
CHANGED
@@ -32,8 +32,10 @@ class TestConfigurator < Test::Unit::TestCase
|
|
32
32
|
assert_equal "0.0.0.0:2007", meth.call('*:2007')
|
33
33
|
assert_equal "0.0.0.0:2007", meth.call('2007')
|
34
34
|
assert_equal "0.0.0.0:2007", meth.call(2007)
|
35
|
-
|
36
|
-
|
35
|
+
|
36
|
+
# the next two aren't portable, consider them unsupported for now
|
37
|
+
# assert_match %r{\A\d+\.\d+\.\d+\.\d+:2007\z}, meth.call('1:2007')
|
38
|
+
# assert_match %r{\A\d+\.\d+\.\d+\.\d+:2007\z}, meth.call('2:2007')
|
37
39
|
end
|
38
40
|
|
39
41
|
def test_config_invalid
|
data/unicorn.gemspec
CHANGED
@@ -43,6 +43,10 @@ Gem::Specification.new do |s|
|
|
43
43
|
|
44
44
|
s.test_files = test_files
|
45
45
|
|
46
|
+
# for people that are absolutely stuck on Rails 2.3.2 and can't
|
47
|
+
# up/downgrade to any other version, the Rack dependency may be
|
48
|
+
# commented out. Nevertheless, upgrading to Rails 2.3.4 or later is
|
49
|
+
# *strongly* recommended for security reasons.
|
46
50
|
s.add_dependency(%q<rack>)
|
47
51
|
|
48
52
|
# s.licenses = %w(GPLv2 Ruby) # licenses= method is not in older Rubygems
|
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.93.
|
4
|
+
version: 0.93.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Unicorn developers
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-27 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|