lib/sneakers/runner.rb in sneakers-0.0.6 vs lib/sneakers/runner.rb in sneakers-0.0.7

- old
+ new

@@ -1,8 +1,7 @@ require 'serverengine' require 'sneakers/workergroup' -require 'sneakers/runner_config' module Sneakers class Runner def initialize(worker_classes, opts={}) @runnerconfig = RunnerConfig.new(worker_classes) @@ -15,6 +14,62 @@ def stop @se.stop end end + + + class RunnerConfig + def method_missing(meth, *args, &block) + if %w{ before_fork after_fork }.include? meth.to_s + @conf[meth] = block + elsif %w{ workers start_worker_delay amqp }.include? meth.to_s + @conf[meth] = args.first + else + super + end + end + + def initialize(worker_classes) + @worker_classes = worker_classes + @conf = {} + end + + def to_h + @conf + end + + + def reload_config! + Sneakers.logger.warn("Loading runner configuration...") + config_file = Sneakers::Config[:runner_config_file] + + if config_file + begin + instance_eval(File.read(config_file), config_file) + Sneakers.logger.info("Loading config with file: #{config_file}") + rescue + Sneakers.logger.error("Cannot load from file '#{config_file}', #{$!}") + end + end + + config = make_serverengine_config + + [:before_fork, :after_fork].each do | hook | + Sneakers::Config[:hooks][hook] = config.delete(hook) if config[hook] + end + + + Sneakers.logger.info("New configuration: #{config.inspect}") + config + end + + private + def make_serverengine_config + Sneakers::Config.merge(@conf).merge({ + :worker_type => 'process', + :worker_classes => @worker_classes + }) + end + end + end