def alive?
      begin
        (@process.nil? || @process.alive?).tap{|is_alive| Bullring.logger.debug {"#{caller_name} #{is_alive ? 'is alive!' : 'is not alive!'}"}}
      rescue DRb::DRbConnError => e
        Bullring.logger.debug {"#{caller_name}: Checking if server alive and got a connection error: " + e.inspect}
        return false
      rescue StandardError => e # things like name errors, in case server doesn't have an alive? method
        Bullring.logger.debug {"#{caller_name}: Checking if server alive and got an error: " + e.inspect}
        true
      rescue
        Bullring.logger.debug {"#{caller_name}: Checking if server alive and got an unknown error"}
        true
      end
    end
def alive?
      begin
        (@process.nil? || @process.alive?).tap{|is_alive| Bullring.logger.debug {"#{caller_name} #{is_alive ? 'is alive!' : 'is not alive!'}"}}
      rescue DRb::DRbConnError => e
        Bullring.logger.debug {"#{caller_name}: Checking if server alive and got a connection error: " + e.inspect}
        return false
      rescue StandardError => e # things like name errors, in case server doesn't have an alive? method
        Bullring.logger.debug {"#{caller_name}: Checking if server alive and got an error: " + e.inspect}
        true
      rescue
        Bullring.logger.debug {"#{caller_name}: Checking if server alive and got an unknown error"}
        true
      end
    end
options looks like:

 {
   :process => {
     :host => [the hostname / IP address that the process listens on],
     :port => [the port that the process listens on],
     :command => [the command to run the process],
     :args => [the arguments to the process command]
   }
 }

 The provided block will be called whenever this process connects (or
 reconnects) to a process, including when the process is restarted. This
 makes the block a good place to put initialization code for the process.