В контроллере у меня есть запрос на отправку аутентифицированного пользователя, запускающего ActiveJob.Очередь в Delayed_Job с ActiveJobs
RunReportsJob.perform_later(param1, param2, param3)
Он работает без ошибок. Но если пользователь снова нажимает кнопку (запрос на стрельбу), чтобы запустить RunReportsJob, пока он уже запущен, одновременно выполняются 2 задания. Я настраиваю delayed_job, потому что я думал, что это служба очередей, и будет хранить все на одной задаче за раз. Но этого не происходит. Ниже моя конфигурация:
# app/jobs/run_reports_job.rb:
class RunReportsJob < ActiveJob::Base
queue_as :RunReports
include ShopifyApp::Controller
# --------------------------------------------------------------
# JOB ERROR MANAGEMENT
# --------------------------------------------------------------
rescue_from(ActiveRecord::RecordNotFound) do |exception|
# Do something with the exception
logger.debug "Hit rescue_from"
end
# --------------------------------------------------------------
# JOB FUNCTION
# --------------------------------------------------------------
def perform(param1, param2, param3)
# some code is performed here
end
end
:
config.active_job.queue_adapter = :delayed_job
# config/initializers/delayed_job_config.rb
:
Delayed::Worker.max_attempts = 1
Delayed::Worker.max_run_time = 12.hours
Мне нужна второй вызов задания для очереди после 1-го, а не стрелять пустым. Мне кажется, что код, который вы здесь представили, ничего не делает, если в очереди есть что-то уже в очереди –
Возможно, это то, что я ищу ?: 'Delayed :: Worker.read_ahead = 1'. Если значение по умолчанию равно 5, означает ли это, что delayed_job пытается запустить последние 5, доступных в его базе данных одновременно? –
oh, я получаю это сейчас, это может быть выполнено с использованием приоритета, я собираюсь изменить код ответа – neydroid