In einem Controller habe ich eine Postanforderung von einem authentifizierten Benutzer, der einen ActiveJob auslöst.Warteschlange in Delayed_Job mit ActiveJobs
RunReportsJob.perform_later(param1, param2, param3)
Es funktioniert ohne Fehler. Wenn der Benutzer jedoch die Schaltfläche (Abschiebeanforderung) erneut drückt, um RunReportsJob auszulösen, während er bereits ausgeführt wurde, werden gleichzeitig zwei Jobs ausgeführt. Ich habe delayed_job eingerichtet, weil ich dachte, es wäre ein Warteschlangen-Service, und würde alles auf einmal erledigen. Aber das passiert nicht. Im Folgenden finden Sie meine Konfiguration:
# 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
Sie in der Dokumentation speichern muss ich die zweiter Job Anruf in die Warteschlange nach dem 1., nicht ein leeres schießen. Es scheint mir, dass der Code, den Sie hier vorgestellt haben, nichts tut, wenn sich bereits etwas in der Warteschlange befindet. –
Vielleicht suche ich das ?: 'Delayed :: Worker.read_ahead = 1'. Wenn der Standardwert 5 ist, bedeutet das, dass der delayed_job versucht, die letzten 5 in seiner Datenbank zur gleichen Zeit verfügbar zu machen? –
oh, ich bekomme es jetzt, dies könnte mit Priorität erreicht werden, werde ich den Antwortcode ändern – neydroid