class RubyWolf::Server
Attributes
app[R]
configs[R]
socket[R]
workers[R]
Public Class Methods
new(rack_file, configs)
click to toggle source
# File lib/ruby_wolf/server.rb, line 5 def initialize(rack_file, configs) @rack_file = rack_file @configs = configs @workers = [] end
Public Instance Methods
start()
click to toggle source
# File lib/ruby_wolf/server.rb, line 11 def start trap_signal setup_rack setup_socket configs[:worker].times do workers << RubyWolf::Worker.new(self) end Process.detach if configs[:daemon] workers.each(&:start) handle_loop end
Private Instance Methods
handle_loop()
click to toggle source
# File lib/ruby_wolf/server.rb, line 40 def handle_loop while stopped_pid = Process.wait do stopped_worker = workers.find { |w| w.pid == stopped_pid } next unless stopped_worker RubyWolf.logger.info("Worker with pid #{stopped_pid} suddenly stopped", :error) sleep(1) worker = RubyWolf::Worker.new(self) worker.start workers << worker end end
setup_rack()
click to toggle source
# File lib/ruby_wolf/server.rb, line 25 def setup_rack RubyWolf.logger.info('~~~ Ruby Wolf ~~~') RubyWolf.logger.info('Loading Rack application') @app, _rack_options = ::Rack::Builder.parse_file(@rack_file) Rails.logger = RubyWolf.logger if defined?(Rails) ActiveRecord::Base.logger = RubyWolf.logger if defined?(ActiveRecord) end
setup_socket()
click to toggle source
# File lib/ruby_wolf/server.rb, line 33 def setup_socket @socket = TCPServer.new(configs[:host], configs[:port]) RubyWolf.logger.info("Server is running on #{configs[:host]}:#{configs[:port]}") RubyWolf.logger.info("Process pid is #{Process.pid}") RubyWolf.logger.info("Number of worker: #{configs[:worker]}") end
trap_signal()
click to toggle source
# File lib/ruby_wolf/server.rb, line 55 def trap_signal Signal.trap(:INT) do if RubyWolf::MAIN_PID == Process.pid puts "Stopping server\n" else puts "Stopping worker #{Process.pid} \n" end exit end Signal.trap(:TERM) do if RubyWolf::MAIN_PID == Process.pid puts "Stopping server\n" workers.each do |w| Process.kill(:TERM, w.pid) end else puts "Stopping worker #{Process.pid} \n" end sleep 1 exit end end