Sha256: 2715c5dd6859b3912cd5eb65414be2859f3fd19b849a06ec2a4ceba87589bfb4

Contents?: true

Size: 1.99 KB

Versions: 3

Compression:

Stored size: 1.99 KB

Contents

require 'rubygems'
require 'daemons'
require 'optparse'

module Delayed
  class Command
    attr_accessor :worker_count
    
    def initialize(args)
      @options = {:quiet => true}
      @worker_count = 1
      
      opts = OptionParser.new do |opts|
        opts.banner = "Usage: #{File.basename($0)} [options] start|stop|restart|run"

        opts.on('-h', '--help', 'Show this message') do
          puts opts
          exit 1
        end
        opts.on('-e', '--environment=NAME', 'Specifies the environment to run this delayed jobs under (test/development/production).') do |e|
          ENV['RAILS_ENV'] = e
        end
        opts.on('--min-priority N', 'Minimum priority of jobs to run.') do |n|
          @options[:min_priority] = n
        end
        opts.on('--max-priority N', 'Maximum priority of jobs to run.') do |n|
          @options[:max_priority] = n
        end
        opts.on('-n', '--number_of_workers=workers', "Number of unique workers to spawn") do |worker_count|
          @worker_count = worker_count.to_i rescue 1
        end
      end
      @args = opts.parse!(args)
    end
  
    def daemonize
      worker_count.times do |worker_index|
        process_name = worker_count == 1 ? "delayed_job" : "delayed_job.#{worker_index}"
        Daemons.run_proc(process_name, :dir => "#{RAILS_ROOT}/tmp/pids", :dir_mode => :normal, :ARGV => @args) do |*args|
          run process_name
        end
      end
    end
    
    def run(worker_name = nil)
      Dir.chdir(RAILS_ROOT)
      
      # Replace the default logger…too bad Rails doesn't make this easier
      Rails.logger.instance_eval do
        @log.reopen File.join(RAILS_ROOT, 'log', 'delayed_job.log')
      end
      Delayed::Worker.logger = Rails.logger
      ActiveRecord::Base.connection.reconnect!
      
      Delayed::Job.worker_name = "#{worker_name} #{Delayed::Job.worker_name}"
      
      Delayed::Worker.new(@options).start  
    rescue => e
      logger.fatal e
      STDERR.puts e.message
      exit 1
    end
    
  end
end

Version data entries

3 entries across 3 versions & 3 rubygems

Version Path
collectiveidea-delayed_job-1.8.2 lib/delayed/command.rb
base_rails_app-0.0.1 lib/vendor/plugins/delayed_job/lib/delayed/command.rb
delayed_job-1.8.2 lib/delayed/command.rb