From 461f5f822168723cd2f5e8be72de39bf857dfc0e Mon Sep 17 00:00:00 2001 From: Theodore Konukhov Date: Mon, 9 Feb 2015 02:39:04 +0300 Subject: [PATCH 1/2] puma spawner --- lib/copycopter_client/process_guard.rb | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/copycopter_client/process_guard.rb b/lib/copycopter_client/process_guard.rb index d8d2a45..83e9edf 100644 --- a/lib/copycopter_client/process_guard.rb +++ b/lib/copycopter_client/process_guard.rb @@ -30,7 +30,11 @@ def start_polling end def spawner? - passenger_spawner? || unicorn_spawner? + puma_spawner? || passenger_spawner? || unicorn_spawner? + end + + def puma_spawner? + $0.include?('puma') end def passenger_spawner? @@ -42,13 +46,28 @@ def unicorn_spawner? end def register_spawn_hooks - if defined?(PhusionPassenger) + if defined?(Puma::Cluster) + register_puma_hook + elsif defined?(PhusionPassenger) register_passenger_hook elsif defined?(Unicorn::HttpServer) register_unicorn_hook end end + def register_puma_hook + @logger.info("Registered Puma fork hook") + poller = @poller + + Puma::Cluster.class_eval do + alias_method :worker_without_copycopter, :worker + define_method :worker do |index, master| + poller.start + worker_without_copycopter(index, master) + end + end + end + def register_passenger_hook @logger.info("Registered Phusion Passenger fork hook") PhusionPassenger.on_event(:starting_worker_process) do |forked| From fa9f4a4b38b0bb555144b9299cfb7708c8ff86c8 Mon Sep 17 00:00:00 2001 From: Theodore Konukhov Date: Sun, 15 Feb 2015 22:35:16 +0300 Subject: [PATCH 2/2] copycopter off env var --- lib/copycopter_client/process_guard.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/copycopter_client/process_guard.rb b/lib/copycopter_client/process_guard.rb index 83e9edf..34db53f 100644 --- a/lib/copycopter_client/process_guard.rb +++ b/lib/copycopter_client/process_guard.rb @@ -30,6 +30,7 @@ def start_polling end def spawner? + return false if ENV['COPYCOPTER_OFF'] puma_spawner? || passenger_spawner? || unicorn_spawner? end