Class | Delayed::Command |
In: |
lib/delayed/command.rb
|
Parent: | Object |
worker_count | [RW] |
# File lib/delayed/command.rb, line 9 9: def initialize(args) 10: @files_to_reopen = [] 11: @options = { 12: :quiet => true, 13: :pid_dir => "#{Rails.root}/tmp/pids" 14: } 15: 16: @worker_count = 1 17: @monitor = false 18: 19: opts = OptionParser.new do |opts| 20: opts.banner = "Usage: #{File.basename($0)} [options] start|stop|restart|run" 21: 22: opts.on('-h', '--help', 'Show this message') do 23: puts opts 24: exit 1 25: end 26: opts.on('-e', '--environment=NAME', 'Specifies the environment to run this delayed jobs under (test/development/production).') do |e| 27: 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" 28: end 29: opts.on('--min-priority N', 'Minimum priority of jobs to run.') do |n| 30: @options[:min_priority] = n 31: end 32: opts.on('--max-priority N', 'Maximum priority of jobs to run.') do |n| 33: @options[:max_priority] = n 34: end 35: opts.on('-n', '--number_of_workers=workers', "Number of unique workers to spawn") do |worker_count| 36: @worker_count = worker_count.to_i rescue 1 37: end 38: opts.on('--pid-dir=DIR', 'Specifies an alternate directory in which to store the process ids.') do |dir| 39: @options[:pid_dir] = dir 40: end 41: opts.on('-i', '--identifier=n', 'A numeric identifier for the worker.') do |n| 42: @options[:identifier] = n 43: end 44: opts.on('-m', '--monitor', 'Start monitor process.') do 45: @monitor = true 46: end 47: opts.on('--sleep-delay N', "Amount of time to sleep when no jobs are found") do |n| 48: @options[:sleep_delay] = n 49: end 50: opts.on('-p', '--prefix NAME', "String to be prefixed to worker process names") do |prefix| 51: @options[:prefix] = prefix 52: end 53: end 54: @args = opts.parse!(args) 55: end
# File lib/delayed/command.rb, line 57 57: def daemonize 58: Delayed::Worker.backend.before_fork 59: 60: ObjectSpace.each_object(File) do |file| 61: @files_to_reopen << file unless file.closed? 62: end 63: 64: dir = @options[:pid_dir] 65: Dir.mkdir(dir) unless File.exists?(dir) 66: 67: if @worker_count > 1 && @options[:identifier] 68: raise ArgumentError, 'Cannot specify both --number-of-workers and --identifier' 69: elsif @worker_count == 1 && @options[:identifier] 70: process_name = "delayed_job.#{@options[:identifier]}" 71: run_process(process_name, dir) 72: else 73: worker_count.times do |worker_index| 74: process_name = worker_count == 1 ? "delayed_job" : "delayed_job.#{worker_index}" 75: run_process(process_name, dir) 76: end 77: end 78: end
# File lib/delayed/command.rb, line 87 87: def run(worker_name = nil) 88: Dir.chdir(Rails.root) 89: 90: # Re-open file handles 91: @files_to_reopen.each do |file| 92: begin 93: file.reopen file.path, "a+" 94: file.sync = true 95: rescue ::Exception 96: end 97: end 98: 99: Delayed::Worker.logger = Logger.new(File.join(Rails.root, 'log', 'delayed_job.log')) 100: Delayed::Worker.backend.after_fork 101: 102: worker = Delayed::Worker.new(@options) 103: worker.name_prefix = "#{worker_name} " 104: worker.start 105: rescue => e 106: Rails.logger.fatal e 107: STDERR.puts e.message 108: exit 1 109: end
# File lib/delayed/command.rb, line 80 80: def run_process(process_name, dir) 81: Daemons.run_proc(process_name, :dir => dir, :dir_mode => :normal, :monitor => @monitor, :ARGV => @args) do |*args| 82: $0 = File.join(@options[:prefix], process_name) if @options[:prefix] 83: run process_name 84: end 85: end