From c4579db76b9ed5b0286fad852e798e8a890f093c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 28 Oct 2010 02:17:25 +0000 Subject: HUP reload restores defaults on unset settings For consistency, changed settings are reset back to their default values if they are removed or commented out from the config file. --- lib/rainbows/http_server.rb | 26 ++++++++++++++++++-------- lib/rainbows/never_block.rb | 7 +++++-- 2 files changed, 23 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/rainbows/http_server.rb b/lib/rainbows/http_server.rb index 3826a23..33aa309 100644 --- a/lib/rainbows/http_server.rb +++ b/lib/rainbows/http_server.rb @@ -24,8 +24,6 @@ class Rainbows::HttpServer < Unicorn::HttpServer G.quit! # let the master reopen and refork us end - #:stopdoc: - # # Add one second to the timeout since our fchmod heartbeat is less # precise (and must be more conservative) than Unicorn does. We # handle many clients per process and can't chmod on every @@ -35,7 +33,23 @@ class Rainbows::HttpServer < Unicorn::HttpServer def timeout=(nr) @timeout = nr + 1 end - #:startdoc: + + def load_config! + use :Base + G.kato = 5 + Rainbows.max_bytes = 1024 * 1024 + @worker_connections = nil + super + @worker_connections ||= Rainbows::MODEL_WORKER_CONNECTIONS[@use] + end + + def ready_pipe=(v) + # hacky hook got force Rainbows! to load modules only in workers + if @master_pid && @master_pid == Process.ppid + extend(Rainbows.const_get(@use)) + end + super + end def use(*args) model = args.shift or return @use @@ -49,7 +63,6 @@ class Rainbows::HttpServer < Unicorn::HttpServer Module === mod or raise ArgumentError, "concurrency model #{model.inspect} not supported" - extend(mod) args.each do |opt| case opt when Hash; O.update(opt) @@ -61,11 +74,8 @@ class Rainbows::HttpServer < Unicorn::HttpServer new_defaults = { 'rainbows.model' => (@use = model.to_sym), 'rack.multithread' => !!(model.to_s =~ /Thread/), + 'rainbows.autochunk' => [:Rev,:EventMachine,:NeverBlock].include?(@use), } - case @use - when :Rev, :EventMachine, :NeverBlock - new_defaults['rainbows.autochunk'] = true - end Rainbows::Const::RACK_DEFAULTS.update(new_defaults) end diff --git a/lib/rainbows/never_block.rb b/lib/rainbows/never_block.rb index 9f050a5..308398e 100644 --- a/lib/rainbows/never_block.rb +++ b/lib/rainbows/never_block.rb @@ -31,8 +31,11 @@ module Rainbows raise ArgumentError, "pool_size must a be an Integer > 0" mod = Rainbows.const_get(O[:backend]) require "never_block" # require EM first since we need a higher version - G.server.extend(mod) - G.server.extend(Core) + end + + def self.extended(klass) + klass.extend(Rainbows.const_get(O[:backend])) # EventMachine + klass.extend(Core) end module Core # :nodoc: all -- cgit v1.2.3-24-ge0c7