class QuickML::QuickMLServer

Public Class Methods

main(args) click to toggle source
# File vendor/qwik/lib/qwik/ml-quickml-server.rb, line 26
def self.main(args)
  server = QuickMLServer.new

  config = Qwik::Config.new
  Qwik::Config.load_args_and_config(config, $0, args)
  config.update({:debug => true, :verbose_mode => true}) if $ml_debug

  ServerMemory.init_logger(config, config)
  ServerMemory.init_mutex(config)
  ServerMemory.init_catalog(config)

  server.run(config)
end
new() click to toggle source
# File vendor/qwik/lib/qwik/ml-quickml-server.rb, line 40
def initialize
  # Do nothing.
end

Private Class Methods

be_daemon() click to toggle source
# File vendor/qwik/lib/qwik/ml-quickml-server.rb, line 82
def self.be_daemon
  exit!(0) if fork
  Process::setsid
  exit!(0) if fork
  Dir::chdir('/')
  File::umask(022)
  STDIN.reopen('/dev/null',  'r+')
  STDOUT.reopen('/dev/null', 'r+')
  STDERR.reopen('/dev/null', 'r+')
end
be_secure(config) click to toggle source
# File vendor/qwik/lib/qwik/ml-quickml-server.rb, line 93
def self.be_secure(config)
  return unless Process.uid == 0
  uid = Etc::getpwnam(config.user).uid 
  gid = Etc::getgrnam(config.group).gid
  FileUtils.touch(config.ml_pid_file)
  ml_log_file = (config[:log_dir].path + Logger::ML_LOG_FILE).to_s
  FileUtils.touch(ml_log_file)
  File.chown(uid, gid, config.sites_dir)
  File.chown(uid, gid, config.ml_pid_file)
  File.chown(uid, gid, ml_log_file)
  Process.uid  = uid
  Process.gid  = gid
  Process.euid = uid
end
check_directory(dir) click to toggle source
# File vendor/qwik/lib/qwik/ml-quickml-server.rb, line 72
def self.check_directory(dir)
  error("#{dir}: No such directory") if ! File.directory?(dir) 
  error("#{dir}: is not writable")   if ! File.writable?(dir) 
end
error(msg) click to toggle source
# File vendor/qwik/lib/qwik/ml-quickml-server.rb, line 77
def self.error (msg)
  STDERR.puts "#{$0}: #{msg}"
  exit(1)
end

Public Instance Methods

run(config) click to toggle source
# File vendor/qwik/lib/qwik/ml-quickml-server.rb, line 44
def run (config)
  QuickMLServer.check_directory(config.sites_dir)

  if ! config.debug
    QuickMLServer.be_daemon
    QuickMLServer.be_secure(config)
  end

  server  = Server.new(config)
  sweeper = Sweeper.new(config)
  trap(:TERM) { server.shutdown; sweeper.shutdown }
  trap(:INT)  { server.shutdown; sweeper.shutdown }
  if Signal.list.key?("HUP")
    trap(:HUP)  { config.logger.reopen }
  end
  sweeper_thread = Thread.new { sweeper.start }
  sweeper_thread.abort_on_exception = true

  if config.debug
    require 'qwik/autoreload'
    AutoReload.start(1, true, 'ML')        # auto reload every sec.
  end

  server.start
end