Class: Delayed::Command
- Inherits:
-
Object
- Object
- Delayed::Command
- Defined in:
- lib/delayed/command.rb
Instance Attribute Summary collapse
-
#worker_count ⇒ Object
Returns the value of attribute worker_count.
Instance Method Summary collapse
- #daemonize ⇒ Object
-
#initialize(args) ⇒ Command
constructor
A new instance of Command.
- #run(worker_name = nil) ⇒ Object
- #run_process(process_name, dir) ⇒ Object
Constructor Details
#initialize(args) ⇒ Command
Returns a new instance of Command.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/delayed/command.rb', line 12 def initialize(args) @options = { :quiet => true, :pid_dir => "#{Rails.root}/tmp/pids" } @worker_count = 1 @monitor = false opts = OptionParser.new do |opts| opts. = "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| STDERR.puts "The -e/--environment option has been deprecated and has no effect. Use RAILS_ENV and see http://github.com/collectiveidea/delayed_job/issues/#issue/7" 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 opts.on('--pid-dir=DIR', 'Specifies an alternate directory in which to store the process ids.') do |dir| @options[:pid_dir] = dir end opts.on('-i', '--identifier=n', 'A numeric identifier for the worker.') do |n| @options[:identifier] = n end opts.on('-m', '--monitor', 'Start monitor process.') do @monitor = true end opts.on('--sleep-delay N', "Amount of time to sleep when no jobs are found") do |n| @options[:sleep_delay] = n.to_i end opts.on('--read-ahead N', "Number of jobs from the queue to consider") do |n| @options[:read_ahead] = n end opts.on('-p', '--prefix NAME', "String to be prefixed to worker process names") do |prefix| @options[:prefix] = prefix end opts.on('--queues=queues', "Specify which queue DJ must look up for jobs") do |queues| @options[:queues] = queues.split(',') end opts.on('--queue=queue', "Specify which queue DJ must look up for jobs") do |queue| @options[:queues] = queue.split(',') end end @args = opts.parse!(args) end |
Instance Attribute Details
#worker_count ⇒ Object
Returns the value of attribute worker_count.
10 11 12 |
# File 'lib/delayed/command.rb', line 10 def worker_count @worker_count end |
Instance Method Details
#daemonize ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/delayed/command.rb', line 68 def daemonize dir = @options[:pid_dir] Dir.mkdir(dir) unless File.exists?(dir) if @worker_count > 1 && @options[:identifier] raise ArgumentError, 'Cannot specify both --number-of-workers and --identifier' elsif @worker_count == 1 && @options[:identifier] process_name = "delayed_job.#{@options[:identifier]}" run_process(process_name, dir) else worker_count.times do |worker_index| process_name = worker_count == 1 ? "delayed_job" : "delayed_job.#{worker_index}" run_process(process_name, dir) end end end |
#run(worker_name = nil) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/delayed/command.rb', line 93 def run(worker_name = nil) Dir.chdir(Rails.root) Delayed::Worker.after_fork Delayed::Worker.logger ||= Logger.new(File.join(Rails.root, 'log', 'delayed_job.log')) worker = Delayed::Worker.new(@options) worker.name_prefix = "#{worker_name} " worker.start rescue => e Rails.logger.fatal e STDERR.puts e. exit 1 end |
#run_process(process_name, dir) ⇒ Object
85 86 87 88 89 90 91 |
# File 'lib/delayed/command.rb', line 85 def run_process(process_name, dir) Delayed::Worker.before_fork Daemons.run_proc(process_name, :dir => dir, :dir_mode => :normal, :monitor => @monitor, :ARGV => @args) do |*args| $0 = File.join(@options[:prefix], process_name) if @options[:prefix] run process_name end end |