class Cumuli::Spawner::ForemanProc

Attributes

env[R]
log_dir[R]
pid[R]

Public Class Methods

new(env, log_dir) click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 6
def initialize(env, log_dir)
  @env = env
  @log_dir = log_dir
  ensure_log_dir_and_file
end

Public Instance Methods

command() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 17
def command
  "foreman start"
end
ensure_log_dir_and_file() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 12
def ensure_log_dir_and_file
  FileUtils.mkdir_p(log_dir)
  FileUtils.touch(log_file)
end
group_id() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 61
def group_id
  PS.new.root_pid
end
kill_children() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 65
def kill_children
  Process.kill('INT', -group_id) # kills the forked group
end
listen_for_signals() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 41
def listen_for_signals
  Cumuli::App::SIGNALS.each do |signal|
    trap(signal) do
      puts "#{self.class}: trapped signal #{signal} in #{Process.pid} ... stopping"
      stop
    end
  end
end
log_file() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 21
def log_file
  "#{log_dir}/#{env}.log"
end
start() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 25
def start
  @pid = fork do
    spawn(
      {
        'HEROKU_ENV' => env,
        'RAILS_ENV' => env
      },
      command,
      {
        out: $stdout.reopen(log_file),
        pgroup: true, # start a new process group
      }
    )
  end
end
started?() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 50
def started?
  !!pid
end
stop() click to toggle source
# File lib/cumuli/spawner/foreman_proc.rb, line 54
def stop
  return if @killed_it
  kill_children
  @killed_it = true
  @pid = nil
end