Module: Puma::JRubyRestart
- Extended by:
- FFI::Library
- Defined in:
- lib/puma/jruby_restart.rb
Class Method Summary collapse
- .chdir_exec(dir, argv) ⇒ Object
- .daemon? ⇒ Boolean
- .daemon_init ⇒ Object
- .daemon_start(dir, argv) ⇒ Object
Class Method Details
.chdir_exec(dir, argv) ⇒ Object
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
24 25 26 |
# File 'lib/puma/jruby_restart.rb', line 24 def self.daemon? ENV.key? 'PUMA_DAEMON_RESTART' end |
.daemon_init ⇒ Object
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
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 |