From 2c83b74f2709191fd1ef2e2ed166e465c5e6a26d Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Wed, 15 Feb 2012 12:30:31 -0800 Subject: [PATCH] Process.pid does not work on Heroku, #22 --- lib/sidekiq/manager.rb | 4 +--- lib/sidekiq/processor.rb | 2 +- lib/sidekiq/util.rb | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/sidekiq/manager.rb b/lib/sidekiq/manager.rb index c4b6786a..8dbf421c 100644 --- a/lib/sidekiq/manager.rb +++ b/lib/sidekiq/manager.rb @@ -45,10 +45,8 @@ module Sidekiq redis.with_connection do |conn| workers = conn.smembers('workers') - logger.info "My tag: ':#{Process.pid}-'" - logger.info "Current workers: #{workers.inspect}" workers.each do |name| - conn.srem('workers', name) if name =~ /:#{Process.pid}-/ + conn.srem('workers', name) if name =~ /:#{process_id}-/ end end end diff --git a/lib/sidekiq/processor.rb b/lib/sidekiq/processor.rb index 1e896b30..7ab15d46 100644 --- a/lib/sidekiq/processor.rb +++ b/lib/sidekiq/processor.rb @@ -47,7 +47,7 @@ module Sidekiq end def to_s - @str ||= "#{hostname}:#{Process.pid}-#{Thread.current.object_id}:default" + @str ||= "#{hostname}:#{process_id}-#{Thread.current.object_id}:default" end private diff --git a/lib/sidekiq/util.rb b/lib/sidekiq/util.rb index 2ecbf904..3617edce 100644 --- a/lib/sidekiq/util.rb +++ b/lib/sidekiq/util.rb @@ -41,5 +41,21 @@ module Sidekiq def redis Sidekiq::Manager.redis end + + def process_id + Sidekiq::Util.process_id + end + + def self.process_id + @pid ||= begin + if Process.pid == 1 + # Heroku does not expose pids. + require 'securerandom' + (SecureRandom.random_number * 4_000_000_000).floor.to_s(16) + else + Process.pid + end + end + end end end