class Heroku::Command::Ps

manage processes (dynos, workers)

Public Instance Methods

dynos() click to toggle source
ps:dynos [QTY]

DEPRECATED: use `heroku ps:scale dynos=N`

scale to QTY web processes

if QTY is not specified, display the number of web processes currently running

Example:

$ heroku ps:dynos 3
Scaling dynos... done, now running 3
# File lib/heroku/command/ps.rb, line 20
def dynos
  # deprecation notice added to v2.21.3 on 03/16/12
  display("~ `heroku ps:dynos QTY` has been deprecated and replaced with `heroku ps:scale dynos=QTY`")

  dynos = shift_argument
  validate_arguments!

  if dynos
    action("Scaling dynos") do
      new_dynos = api.put_dynos(app, dynos).body["dynos"]
      status("now running #{new_dynos}")
    end
  else
    app_data = api.get_app(app).body
    if app_data["stack"] == "cedar"
      raise(Heroku::Command::CommandFailed, "For Cedar apps, use `heroku ps`")
    else
      display("#{app} is running #{quantify("dyno", app_data["dynos"])}")
    end
  end
end
index() click to toggle source
ps

list processes for an app

Example:

$ heroku ps
=== run: one-off processes
run.1: up for 5m: `bash`

=== web: `bundle exec thin start -p $PORT`
web.1: created for 30s
# File lib/heroku/command/ps.rb, line 94
def index
  validate_arguments!
  processes = api.get_ps(app).body

  processes_by_command = Hash.new {|hash,key| hash[key] = []}
  processes.each do |process|
    name    = process["process"].split(".").first
    elapsed = time_ago(Time.now - process['elapsed'])

    if name == "run"
      key  = "run: one-off processes"
      item = "%s: %s %s: `%s`" % [ process["process"], process["state"], elapsed, process["command"] ]
    else
      key  = "#{name}: `#{process["command"]}`"
      item = "%s: %s %s" % [ process["process"], process["state"], elapsed ]
    end

    processes_by_command[key] << item
  end

  processes_by_command.keys.each do |key|
    processes_by_command[key] = processes_by_command[key].sort do |x,y|
      x.match(/\.(\d+):/).captures.first.to_i <=> y.match(/\.(\d+):/).captures.first.to_i
    end
  end

  processes_by_command.keys.sort.each do |key|
    styled_header(key)
    styled_array(processes_by_command[key], :sort => false)
  end
end
restart() click to toggle source
ps:restart [PROCESS]

restart an app process

if PROCESS is not specified, restarts all processes on the app

Examples:

$ heroku ps:restart web.1
Restarting web.1 process... done

$ heroku ps:restart web
Restarting web processes... done

$ heroku ps:restart
Restarting processes... done
# File lib/heroku/command/ps.rb, line 143
def restart
  process = shift_argument
  validate_arguments!

  message, options = case process
  when NilClass
    ["Restarting processes", {}]
  when /.+\..+/
    ps = args.first
    ["Restarting #{ps} process", { :ps => ps }]
  else
    type = args.first
    ["Restarting #{type} processes", { :type => type }]
  end

  action(message) do
    api.post_ps_restart(app, options)
  end
end
scale() click to toggle source
ps:scale PROCESS1=AMOUNT1 [PROCESS2=AMOUNT2 ...]

scale processes by the given amount

Examples:

$ heroku ps:scale web=3 worker+1
Scaling web processes... done, now running 3
Scaling worker processes... done, now running 1
# File lib/heroku/command/ps.rb, line 175
def scale
  changes = {}
  args.each do |arg|
    if arg =~ /^([a-zA-Z0-9_]+)([=+-]\d+)$/
      changes[$1] = $2
    end
  end

  if changes.empty?
    error("Usage: heroku ps:scale PROCESS1=AMOUNT1 [PROCESS2=AMOUNT2 ...]\nMust specify PROCESS and AMOUNT to scale.")
  end

  changes.keys.sort.each do |process|
    amount = changes[process]
    action("Scaling #{process} processes") do
      amount.gsub!("=", "")
      new_qty = api.post_ps_scale(app, process, amount).body
      status("now running #{new_qty}")
    end
  end
end
stop() click to toggle source

ps:stop PROCESS

stop an app process

Examples:

$ heroku stop run.3 Stopping run.3 process… done

$ heroku stop run Stopping run processes… done

# File lib/heroku/command/ps.rb, line 211
def stop
  process = shift_argument
  validate_arguments!

  message, options = case process
  when NilClass
    error("Usage: heroku ps:stop PROCESS\nMust specify PROCESS to stop.")
  when /.+\..+/
    ps = args.first
    ["Stopping #{ps} process", { :ps => ps }]
  else
    type = args.first
    ["Stopping #{type} processes", { :type => type }]
  end

  action(message) do
    api.post_ps_stop(app, options)
  end
end
workers() click to toggle source
ps:workers [QTY]

DEPRECATED: use `heroku ps:scale workers=N`

scale to QTY background processes

if QTY is not specified, display the number of background processes currently running

Example:

$ heroku ps:dynos 3
Scaling workers... done, now running 3
# File lib/heroku/command/ps.rb, line 57
def workers
  # deprecation notice added to v2.21.3 on 03/16/12
  display("~ `heroku ps:workers QTY` has been deprecated and replaced with `heroku ps:scale workers=QTY`")

  workers = shift_argument
  validate_arguments!

  if workers
    action("Scaling workers") do
      new_workers = api.put_workers(app, workers).body["workers"]
      status("now running #{new_workers}")
    end
  else
    app_data = api.get_app(app).body
    if app_data["stack"] == "cedar"
      raise(Heroku::Command::CommandFailed, "For Cedar apps, use `heroku ps`")
    else
      display("#{app} is running #{quantify("worker", app_data["workers"])}")
    end
  end
end