Class: Thin::Preforker::Controller
- Inherits:
-
Controllers::Cluster
- Object
- Controllers::Cluster
- Thin::Preforker::Controller
- Defined in:
- lib/thin/preforker/controller.rb
Instance Method Summary collapse
-
#initialize(options) ⇒ Controller
constructor
A new instance of Controller.
-
#restart ⇒ Object
Stop and start the servers.
-
#start ⇒ Object
Start the servers.
-
#start_server(number, app) ⇒ Object
Start a single server.
-
#stop ⇒ Object
Stop the servers.
-
#stop_server(number) ⇒ Object
Stop a single server.
Constructor Details
#initialize(options) ⇒ Controller
Returns a new instance of Controller.
4 5 6 7 8 9 10 11 12 13 |
# File 'lib/thin/preforker/controller.rb', line 4 def initialize @options = if @options[:socket] @options.delete(:address) @options.delete(:port) end GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=) end |
Instance Method Details
#restart ⇒ Object
Stop and start the servers.
98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/thin/preforker/controller.rb', line 98 def restart daemonize_prefoker if @options[:daemonize] with_each_server do |n| stop_server n start_server n, app sleep 0.1 # Let the OS breath end Process.waitall end |
#start ⇒ Object
Start the servers
16 17 18 19 20 21 22 23 24 |
# File 'lib/thin/preforker/controller.rb', line 16 def start daemonize_prefoker if @options[:daemonize] with_each_server do |n| start_server n, app end Process.waitall end |
#start_server(number, app) ⇒ Object
Start a single server
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/thin/preforker/controller.rb', line 27 def start_server(number, app) log "Starting server on #{server_id(number)} ... " server = Thin::Server.new((number)[:socket] || (number)[:address], (number)[:port], (number)) # Set options server.pid_file = (number)[:pid] server.log_file = (number)[:log] server.timeout = (number)[:timeout] server.maximum_connections = (number)[:max_conns] server.maximum_persistent_connections = (number)[:max_persistent_conns] server.threaded = (number)[:threaded] server.no_epoll = (number)[:no_epoll] if server.backend.respond_to?(:no_epoll=) # ssl support if (number)[:ssl] server.ssl = true server. = { :private_key_file => (number)[:ssl_key_file], :cert_chain_file => (number)[:ssl_cert_file], :verify_peer => (number)[:ssl_verify] } end before_fork_for(server, number) Process.fork do after_fork_for(server, number) # Constantize backend class (number)[:backend] = eval((number)[:backend], TOPLEVEL_BINDING) if (number)[:backend] # +config+ must be called before changing privileges since it might require superuser power. server.config server.change_privilege (number)[:user], (number)[:group] if (number)[:user] && (number)[:group] # Set app already loaded server.app = app # If a prefix is required, wrap in Rack URL mapper server.app = Rack::URLMap.new((number)[:prefix] => server.app) if (number)[:prefix] # If a stats URL is specified, wrap in Stats adapter server.app = Thin::Stats::Adapter.new(server.app, (number)[:stats]) if (number)[:stats] server.start end wait_for_file :creation, (number)[:pid] end |
#stop ⇒ Object
Stop the servers
78 79 80 81 82 |
# File 'lib/thin/preforker/controller.rb', line 78 def stop with_each_server do |n| stop_server n end end |
#stop_server(number) ⇒ Object
Stop a single server
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/thin/preforker/controller.rb', line 85 def stop_server(number) log "Stopping server on #{server_id(number)} ... " raise Thin::OptionRequired, :pid unless @options[:pid] tail_log((number)[:log]) do if Server.kill((number)[:pid], (number)[:force] ? 0 : ((number)[:timeout] || 60)) wait_for_file :deletion, (number)[:pid] end end end |