diff --git a/lib/copycopter_client/process_guard.rb b/lib/copycopter_client/process_guard.rb index d8d2a45..34db53f 100644 --- a/lib/copycopter_client/process_guard.rb +++ b/lib/copycopter_client/process_guard.rb @@ -30,7 +30,12 @@ def start_polling end def spawner? - passenger_spawner? || unicorn_spawner? + return false if ENV['COPYCOPTER_OFF'] + puma_spawner? || passenger_spawner? || unicorn_spawner? + end + + def puma_spawner? + $0.include?('puma') end def passenger_spawner? @@ -42,13 +47,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|