Skip to content

Instantly share code, notes, and snippets.

@zefer
Created July 14, 2011 15:28
Show Gist options
  • Save zefer/1082673 to your computer and use it in GitHub Desktop.
Save zefer/1082673 to your computer and use it in GitHub Desktop.
Patch HireFire so worker auto-scaling works on the Beta Heroku Cedar stack
# hopefully a temporary patch so HireFire will run on the Heroku Cedar stack
# NB: the worker type is hard-coded as "worker" below, this must correlate to the type in Procfile
# NB: ENV['APP_NAME'] must be defined (e.g. 'heroku config:add APP_NAME=myherokuappname')
# using ps & ps_scale instead of info & set_workers
class HireFire::Environment::Heroku
private
def workers(amount = nil)
if amount.nil?
# return client.info(ENV['APP_NAME'])[:workers].to_i
return client.ps(ENV['APP_NAME']).select {|p| p['process'] =~ /worker.[0-9]+/}.length
end
# client.set_workers(ENV['APP_NAME'], amount)
return client.ps_scale(ENV['APP_NAME'], {"type" => "worker", "qty" => amount})
rescue RestClient::Exception
HireFire::Logger.message("Worker query request failed with #{ $!.class.name } #{ $!.message }")
nil
end
end
# quick override to ensure that HireFire is activated on Heroku. The change is that it is looking for
# ::Rails.env.production? instead of ENV.include?('HEROKU_UPID')
module HireFire
module Environment
module ClassMethods
def environment
@environment ||= HireFire::Environment.const_get(
if environment = HireFire.configuration.environment
environment.to_s.camelize
else
::Rails.env.production? ? 'Heroku' : 'Noop'
end
).new
end
end
end
end
@ptagell
Copy link

ptagell commented Dec 26, 2011

Thanks - this worked really well. Can I ask a seemingly dumb question - how do you tell when all workers have been fired? Hirefire does say that it is firing all of my workers, but when I run heroku scale, it still says worker+1 http://cl.ly/0H1g441f2T1o1Y0C350g

@zefer
Copy link
Author

zefer commented Dec 26, 2011

Hi @ptagell use heroku ps to see what's running. heroku scale is for changing the number of dynos, that is a usage example you are referring to.

@ptagell
Copy link

ptagell commented Dec 26, 2011 via email

@davidtlee
Copy link

Is this still up to date? I can't seem to get it working...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment