This class does all the nightmare work of setting up a working environment for your daemon.
# File lib/daemon_kit/initializer.rb, line 62 def self.continue! initializer = new DaemonKit.configuration initializer.after_daemonize end
# File lib/daemon_kit/initializer.rb, line 217 def self.log_exceptions trace_file = File.join( DaemonKit.root, 'log', "backtrace-#{Time.now.strftime('%Y%m%d%H%M%S')}-#{Process.pid}.log" ) trace_log = Logger.new( trace_file ) # Find the last exception e = nil ObjectSpace.each_object {|o| if ::Exception === o e = o end } trace_log.info "*** Below you'll find the most recent exception thrown, this will likely (but not certainly) be the exception that made #{DaemonKit.configuration.daemon_name} exit abnormally ***" trace_log.error e trace_log.info "*** Below you'll find all the exception objects in memory, some of them may have been thrown in your application, others may just be in memory because they are standard exceptions ***" ObjectSpace.each_object {|o| if ::Exception === o trace_log.error o end } trace_log.close end
# File lib/daemon_kit/initializer.rb, line 88 def initialize( configuration ) @configuration = configuration end
# File lib/daemon_kit/initializer.rb, line 53 def self.run configuration = DaemonKit.configuration || Configuration.new yield configuration if block_given? initializer = new configuration initializer.before_daemonize initializer end
# File lib/daemon_kit/initializer.rb, line 67 def self.shutdown( clean = false, do_exit = false ) return unless $daemon_kit_shutdown_hooks_ran.nil? $daemon_kit_shutdown_hooks_ran = true DaemonKit.logger.info "Running shutdown hooks" DaemonKit.configuration.shutdown_hooks.each do |hook| begin hook.call rescue => e DaemonKit.logger.exception( e ) end end log_exceptions if DaemonKit.configuration.backtraces && !clean DaemonKit.logger.warn "Shutting down #{DaemonKit.configuration.daemon_name}" exit if do_exit end
# File lib/daemon_kit/initializer.rb, line 102 def after_daemonize set_umask initialize_logger initialize_signal_traps include_core_lib load_postdaemonize_configs configure_backtraces set_process_name DaemonKit.logger.info( "DaemonKit (#{DaemonKit::VERSION}) booted, now running #{DaemonKit.configuration.daemon_name}" ) if DaemonKit.configuration.user || DaemonKit.configuration.group euid = Process.euid egid = Process.egid uid = Process.uid gid = Process.gid DaemonKit.logger.info( "DaemonKit dropped privileges to: #{euid} (EUID), #{egid} (EGID), #{uid} (UID), #{gid} (GID)" ) end end
# File lib/daemon_kit/initializer.rb, line 92 def before_daemonize DaemonKit.configuration = @configuration set_load_path load_gems load_patches load_environment load_predaemonize_configs end
# File lib/daemon_kit/initializer.rb, line 209 def configure_backtraces Thread.abort_on_exception = configuration.backtraces end
# File lib/daemon_kit/initializer.rb, line 203 def include_core_lib if File.exists?( core_lib = File.join( DAEMON_ROOT, 'lib', configuration.daemon_name + '.rb' ) ) require core_lib end end
# File lib/daemon_kit/initializer.rb, line 169 def initialize_logger return if DaemonKit.logger unless logger = configuration.logger logger = AbstractLogger.new( configuration.log_path ) logger.level = configuration.log_level logger.copy_to_stdout = configuration.log_stdout end DaemonKit.logger = logger DaemonKit.logger.info "DaemonKit (#{DaemonKit::VERSION}) booting in #{DAEMON_ENV} mode" configuration.trap("USR1") { DaemonKit.logger.level = DaemonKit.logger.debug? ? :info : :debug DaemonKit.logger.info "Log level changed to #{DaemonKit.logger.debug? ? 'DEBUG' : 'INFO' }" } configuration.trap("USR2") { DaemonKit.logger.level = :debug DaemonKit.logger.info "Log level changed to DEBUG" } configuration.trap("HUP") { DaemonKit.logger.close } end
# File lib/daemon_kit/initializer.rb, line 195 def initialize_signal_traps # Only exit the process if we're not in the 'test' environment term_proc = Proc.new { DaemonKit::Initializer.shutdown( true, DAEMON_ENV != 'test' ) } configuration.trap( 'INT', term_proc ) configuration.trap( 'TERM', term_proc ) at_exit { DaemonKit::Initializer.shutdown } end
# File lib/daemon_kit/initializer.rb, line 139 def load_environment # Needs to be global to prevent loading the files twice return if $_daemon_environment_loaded $_daemon_environment_loaded = true config = configuration eval(IO.read(configuration.environment_path), binding, configuration.environment_path) eval(IO.read(configuration.daemon_initializer), binding, configuration.daemon_initializer) if File.exist?( configuration.daemon_initializer ) end
# File lib/daemon_kit/initializer.rb, line 135 def load_patches end
# File lib/daemon_kit/initializer.rb, line 159 def load_postdaemonize_configs Dir[ File.join( DAEMON_ROOT, 'config', 'post-daemonize', '*.rb' ) ].each do |f| require f end end
# File lib/daemon_kit/initializer.rb, line 151 def load_predaemonize_configs Dir[ File.join( DAEMON_ROOT, 'config', 'pre-daemonize', '*.rb' ) ].each do |f| next if File.basename( f ) == File.basename( configuration.daemon_initializer ) require f end end
# File lib/daemon_kit/initializer.rb, line 125 def set_load_path configuration.load_paths.each do |d| $:.unshift( "#{DAEMON_ROOT}/#{d}" ) if File.directory?( "#{DAEMON_ROOT}/#{d}" ) end end
Generated with the Darkfish Rdoc Generator 2.