Class: DaemonKit::Initializer
- Inherits:
-
Object
- Object
- DaemonKit::Initializer
- Defined in:
- lib/daemon_kit/initializer.rb
Overview
This class does all the nightmare work of setting up a working environment for your daemon.
Instance Attribute Summary collapse
-
#configuration ⇒ Object
readonly
Returns the value of attribute configuration.
Class Method Summary collapse
- .continue! ⇒ Object
- .run {|configuration| ... } ⇒ Object
- .safely_available? ⇒ Boolean
- .shutdown(clean = false, do_exit = false) ⇒ Object
Instance Method Summary collapse
- #after_daemonize ⇒ Object
- #before_daemonize ⇒ Object
- #configure_exception_handling ⇒ Object
- #configure_safely ⇒ Object
- #include_core_lib ⇒ Object
-
#initialize(configuration) ⇒ Initializer
constructor
A new instance of Initializer.
- #initialize_logger ⇒ Object
- #initialize_signal_traps ⇒ Object
- #load_environment ⇒ Object
- #load_gems ⇒ Object
- #load_patches ⇒ Object
- #load_postdaemonize_configs ⇒ Object
- #load_predaemonize_configs ⇒ Object
- #set_load_path ⇒ Object
- #set_process_name ⇒ Object
- #set_umask ⇒ Object
Constructor Details
#initialize(configuration) ⇒ Initializer
Returns a new instance of Initializer.
89 90 91 |
# File 'lib/daemon_kit/initializer.rb', line 89 def initialize( configuration ) @configuration = configuration end |
Instance Attribute Details
#configuration ⇒ Object (readonly)
Returns the value of attribute configuration.
46 47 48 |
# File 'lib/daemon_kit/initializer.rb', line 46 def configuration @configuration end |
Class Method Details
.continue! ⇒ Object
57 58 59 60 |
# File 'lib/daemon_kit/initializer.rb', line 57 def self.continue! initializer = new DaemonKit.configuration initializer.after_daemonize end |
.run {|configuration| ... } ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/daemon_kit/initializer.rb', line 48 def self.run configuration = DaemonKit.configuration || Configuration.new yield configuration if block_given? initializer = new configuration initializer.before_daemonize initializer end |
.safely_available? ⇒ Boolean
85 86 87 |
# File 'lib/daemon_kit/initializer.rb', line 85 def self.safely_available? defined? Safely end |
.shutdown(clean = false, do_exit = false) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/daemon_kit/initializer.rb', line 62 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 if safely_available? Safely::Backtrace.safe_shutdown! if DaemonKit.configuration.backtraces && clean end DaemonKit.logger.warn "Shutting down #{DaemonKit.configuration.daemon_name}" exit if do_exit end |
Instance Method Details
#after_daemonize ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/daemon_kit/initializer.rb', line 103 def after_daemonize set_umask initialize_logger initialize_signal_traps include_core_lib load_postdaemonize_configs configure_exception_handling 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 |
#before_daemonize ⇒ Object
93 94 95 96 97 98 99 100 101 |
# File 'lib/daemon_kit/initializer.rb', line 93 def before_daemonize DaemonKit.configuration = @configuration set_load_path load_gems load_patches load_environment load_predaemonize_configs end |
#configure_exception_handling ⇒ Object
210 211 212 213 214 |
# File 'lib/daemon_kit/initializer.rb', line 210 def configure_exception_handling Thread.abort_on_exception = true configure_safely if self.class.safely_available? end |
#configure_safely ⇒ Object
216 217 218 219 220 221 222 |
# File 'lib/daemon_kit/initializer.rb', line 216 def configure_safely DaemonKit.logger.info "Configuring safely for exception handling" Safely::Strategy::Log.logger = DaemonKit.logger Safely::Backtrace.trace_directory = File.join( DAEMON_ROOT, "log" ) Safely::Backtrace.enable! end |
#include_core_lib ⇒ Object
204 205 206 207 208 |
# File 'lib/daemon_kit/initializer.rb', line 204 def include_core_lib if File.exists?( core_lib = File.join( DAEMON_ROOT, 'lib', configuration.daemon_name + '.rb' ) ) require core_lib end end |
#initialize_logger ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/daemon_kit/initializer.rb', line 170 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::Application.reopen_logs } end |
#initialize_signal_traps ⇒ Object
196 197 198 199 200 201 202 |
# File 'lib/daemon_kit/initializer.rb', line 196 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 |
#load_environment ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/daemon_kit/initializer.rb', line 140 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 |
#load_gems ⇒ Object
132 133 134 |
# File 'lib/daemon_kit/initializer.rb', line 132 def load_gems end |
#load_patches ⇒ Object
136 137 138 |
# File 'lib/daemon_kit/initializer.rb', line 136 def load_patches end |
#load_postdaemonize_configs ⇒ Object
160 161 162 163 164 |
# File 'lib/daemon_kit/initializer.rb', line 160 def load_postdaemonize_configs Dir[ File.join( DAEMON_ROOT, 'config', 'post-daemonize', '*.rb' ) ].each do |f| require f end end |
#load_predaemonize_configs ⇒ Object
152 153 154 155 156 157 158 |
# File 'lib/daemon_kit/initializer.rb', line 152 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 |
#set_load_path ⇒ Object
126 127 128 129 130 |
# File 'lib/daemon_kit/initializer.rb', line 126 def set_load_path configuration.load_paths.each do |d| $:.unshift( "#{DAEMON_ROOT}/#{d}" ) if File.directory?( "#{DAEMON_ROOT}/#{d}" ) end end |
#set_process_name ⇒ Object
224 225 226 |
# File 'lib/daemon_kit/initializer.rb', line 224 def set_process_name $0 = configuration.daemon_name end |
#set_umask ⇒ Object
166 167 168 |
# File 'lib/daemon_kit/initializer.rb', line 166 def set_umask File.umask configuration.umask end |