class Duoconsole

Attributes

child_socket[RW]
parent_socket[RW]

Public Class Methods

start() click to toggle source
# File lib/duoconsole.rb, line 5
def self.start
  new.start
end

Public Instance Methods

command_client() click to toggle source
# File lib/duoconsole.rb, line 61
def command_client
  @command_client ||= CommandClient.new(parent_socket)
end
create_socket_pair() click to toggle source
# File lib/duoconsole.rb, line 27
def create_socket_pair
  self.child_socket, self.parent_socket = Socket.pair(:UNIX, :DGRAM, 0)
end
fork_child() click to toggle source
# File lib/duoconsole.rb, line 31
def fork_child
  child_pid = fork do
    trap(:INT) {
      # Ignore. This process needs to stay alive until the parent process exits
    }

    CommandServer.new(child_socket).start
  end

  # cleanup before exiting
  at_exit {
    Process.kill(:QUIT, child_pid)
    parent_socket.close
    child_socket.close
  }
end
load_application() click to toggle source
# File lib/duoconsole.rb, line 48
def load_application
  require APP_PATH
  Rails.application.require_environment!
end
preload_gems() click to toggle source
# File lib/duoconsole.rb, line 19
def preload_gems
  require 'rails/all'

  if defined?(Bundler)
    Bundler.require(:default, :assets)
  end
end
start() click to toggle source
# File lib/duoconsole.rb, line 11
def start
  preload_gems
  create_socket_pair
  fork_child
  load_application
  start_console
end
start_console() click to toggle source
# File lib/duoconsole.rb, line 53
def start_console
  require 'rails/commands/console'
  require 'rails/console/app'
  ConsoleDelegation.duoconsole = self
  Rails::ConsoleMethods.send :include, ConsoleDelegation
  Rails::Console.start(Rails.application)
end