Module: Puma::JRubyRestart

Extended by:
FFI::Library
Defined in:
lib/puma/jruby_restart.rb

Class Method Summary collapse

Class Method Details

.chdir_exec(dir, argv) ⇒ Object

Raises:

  • (SystemCallError)


14
15
16
17
18
19
20
21
22
# File 'lib/puma/jruby_restart.rb', line 14

def self.chdir_exec(dir, argv)
  chdir(dir)
  cmd = argv.first
  argv = ([:string] * argv.size).zip(argv).flatten
  argv << :string
  argv << nil
  execlp(cmd, *argv)
  raise SystemCallError.new(FFI.errno)
end

.daemon?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/puma/jruby_restart.rb', line 24

def self.daemon?
  ENV.key? 'PUMA_DAEMON_RESTART'
end

.daemon_initObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/puma/jruby_restart.rb', line 28

def self.daemon_init
  return false unless ENV.key? 'PUMA_DAEMON_RESTART'

  master = ENV['PUMA_DAEMON_RESTART']
  Process.kill "SIGUSR2", master.to_i

  setsid

  null = File.open "/dev/null", "w+"
  STDIN.reopen null
  STDOUT.reopen null
  STDERR.reopen null

  true
end

.daemon_start(dir, argv) ⇒ Object

Raises:

  • (SystemCallError)


44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/puma/jruby_restart.rb', line 44

def self.daemon_start(dir, argv)
  ENV['PUMA_DAEMON_RESTART'] = Process.pid.to_s

  cmd = argv.first
  argv = ([:string] * argv.size).zip(argv).flatten
  argv << :string
  argv << nil

  chdir(dir)
  ret = fork
  return ret if ret != 0
  execlp(cmd, *argv)
  raise SystemCallError.new(FFI.errno)
end