scinote-web/config/initializers/delayed_job_config.rb

68 lines
2.4 KiB
Ruby

# DelayedWorkerConfig is a configuration object that parses and sanitize
# environmental variables. @note Used only for Delayed::Worker settings
module DelayedWorkerConfig
module_function
# If you want to keep failed jobs, set DELAYED_WORKER_DESTROY_FAILED_JOBS to
# false. The failed jobs will be marked with non-null failed_at.
def destroy_failed_jobs
value = ENV['DELAYED_WORKER_DESTROY_FAILED_JOBS']
return false unless value
return false unless value.in? %w(true 1)
true
end
# If no jobs are found, the worker sleeps for the amount of time specified by
# the sleep delay option. Default to 60 second.
def sleep_delay
value = ENV['DELAYED_WORKER_SLEEP_DELAY'].to_i
return 60 if value.zero?
value
end
# The default is 6 attempts. After this, the job either deleted
# or left in the database with "failed_at" set dempends on the
# DESTROY_FAILED_JOBS value
def max_attempts
1 # We want ActiveJob to handle retries
end
# The default DELAYED_WORKER_MAX_RUN_TIME is 30.minutes.
# If your job takes longer than that, another computer could pick it up.
# It's up to you to make sure your job doesn't exceed this time.
# You should set this to the longest time you think the job could take.
def max_run_time
value = ENV['DELAYED_WORKER_MAX_RUN_TIME'].to_i
return 30.minutes if value.zero?
value.minutes
end
# The default behavior is to read 10 jobs from the queue when finding an
# available job. You can configure this by setting.
def read_ahead
value = ENV['DELAYED_WORKER_READ_AHEAD'].to_i
return 10 if value.zero?
value
end
# By default all jobs will be queued without a named queue.
# A default named queue can be specified by using
def default_queue_name
value = ENV['DELAYED_WORKER_DEFAULT_QUEUE_NAME']
return 'default' unless value
value
end
end
# Delayed::Worker configuration
Delayed::Worker.destroy_failed_jobs = DelayedWorkerConfig.destroy_failed_jobs
Delayed::Worker.sleep_delay = DelayedWorkerConfig.sleep_delay
Delayed::Worker.max_attempts = DelayedWorkerConfig.max_attempts
Delayed::Worker.max_run_time = DelayedWorkerConfig.max_run_time
Delayed::Worker.read_ahead = DelayedWorkerConfig.read_ahead
Delayed::Worker.default_queue_name = DelayedWorkerConfig.default_queue_name
Delayed::Worker.queue_attributes = {
high_priority: { priority: -10 },
webhooks: { priority: 5 },
low_priority: { priority: 10 }
}