Skip to content

Instantly share code, notes, and snippets.

@mutru
Created August 29, 2012 01:15

Revisions

  1. Otto Hilska created this gist Aug 29, 2012.
    58 changes: 58 additions & 0 deletions gistfile1.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    rails_env = ENV['RAILS_ENV']
    raise "Please specify RAILS_ENV." unless rails_env
    rails_root = ENV['RAILS_ROOT'] || File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))

    RESQUE_PROCESSORS = [
    [1, "foo,bar"],
    [2, "baz"],
    [3, "demo"]
    ]

    RESQUE_PROCESSORS.each do |resque_id, resque_queues|
    God.watch do |w|
    w.dir = "#{rails_root}"
    w.name = "resque-#{resque_id}"
    w.group = 'resque'
    w.interval = 30.seconds
    w.env = {"QUEUES"=>resque_queues, "RAILS_ENV"=>rails_env, "BUNDLE_GEMFILE"=>"#{rails_root}/Gemfile"}
    w.start = "bundle exec rake -f #{rails_root}/Rakefile environment resque:work"
    w.log = "#{rails_root}/log/resque-#{resque_id}.log"

    # restart if memory gets too high
    w.transition(:up, :restart) do |on|
    on.condition(:memory_usage) do |c|
    c.above = 350.megabytes
    c.times = 2
    end
    end

    # determine the state on startup
    w.transition(:init, { true => :up, false => :start }) do |on|
    on.condition(:process_running) do |c|
    c.running = true
    end
    end

    # determine when process has finished starting
    w.transition([:start, :restart], :up) do |on|
    on.condition(:process_running) do |c|
    c.running = true
    c.interval = 5.seconds
    end

    # failsafe
    on.condition(:tries) do |c|
    c.times = 5
    c.transition = :start
    c.interval = 5.seconds
    end
    end

    # start if process is not running
    w.transition(:up, :start) do |on|
    on.condition(:process_running) do |c|
    c.running = false
    end
    end
    end
    end