class Spring::ApplicationManager::Worker
Attributes
on_done[RW]
pid[R]
screen_name[R]
screen_pid[R]
socket[R]
uuid[R]
Public Class Methods
new(env, args)
click to toggle source
# File lib/spring-jruby/impl/pool/application_manager.rb, line 7 def initialize(env, args) @spring_env = Env.new channel, @remote_socket = WorkerChannel.pair @uuid = File.basename(@remote_socket.path).gsub('.sock', '') Bundler.with_clean_env do spawn_screen( env.merge("SPRING_SOCKET" => @remote_socket.path), args ) end @socket = channel.to_io end
Public Instance Methods
await_boot()
click to toggle source
# File lib/spring-jruby/impl/pool/application_manager.rb, line 35 def await_boot Process.detach(screen_pid) @pid = socket.gets.to_i start_wait_thread(pid, socket) unless pid.zero? @remote_socket.close end
log(message)
click to toggle source
# File lib/spring-jruby/impl/pool/application_manager.rb, line 55 def log(message) @spring_env.log "[worker:#{uuid}] #{message}" end
spawn_screen(env, args)
click to toggle source
# File lib/spring-jruby/impl/pool/application_manager.rb, line 22 def spawn_screen(env, args) @screen_name = "spring_#{@uuid}" @screen_pid = Process.spawn( env.merge("SPRING_SCREEN_NAME" => screen_name), "screen", "-d", "-m", "-S", screen_name, *args ) log "(spawn #{@screen_pid})" end
start_wait_thread(pid, child)
click to toggle source
# File lib/spring-jruby/impl/pool/application_manager.rb, line 42 def start_wait_thread(pid, child) Thread.new { begin Process.kill(0, pid) while sleep(1) rescue Errno::ESRCH end log "child #{pid} shutdown" on_done.call(self) if on_done } end