Je programme un travail à exécuter dans 10 minutes. Comment annuler correctement ce travail particulier sans utiliser aucun type de champs supplémentaires encrassés dans le modèle, etc. Existe-t-il un appel à supprimer un travail particulier ou des travaux liés à un modèle, une instance, etc. spécifique?
Réponses
Trop de publicités?disclaimer: je ne suis pas un expert de l'utilisateur de delayed_job...
"Est-il un appel à la suppression de poste, ou les emplois liés au modèle spécifique, exemple, etc?"
Différés::Travail est juste un ActiveRecord objet de sorte que vous pouvez trouver et détruire l'un de ces enregistrements. En fonction de votre cas d'utilisation, ce pourraient être traitées de différentes façons. Si quelqu'un va à la manuellement détruire ce qui pourrait être gérée par le biais d'une interface d'administration de votre application web.
# list all jobs
Delayed::Job.all
# find a job by id
job = Delayed::Job.find(params[:id])
# delete it
job.delete
si vous avez besoin de processus de tâche de suppression d'emplois par "type d'emploi" on peut faire une boucle par chacun et de la supprimer si elle correspond à votre travail; essayez ceci dans le script/console
class MyJob < Struct.new(:some_value);
def perform
# ...
end
end
my_job = MyJob.new('xyz')
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob"
job.handler
# => "--- !ruby/struct:MyJob \nsome_value: xyz\n"
donc, étant donné ce qui précède, si vous vouliez supprimer tous les travaux de type MyJob
Delayed::Job.all do |job|
if job.name == "MyJob" then
job.delete
end
end
cela peut ou peut ne pas aider votre situation? dans de nombreux cas, vous voudrez peut-être supprimer un MyJob mais seulement lorsque l' :some_value attribut a 'abc' et pas 'xyz'. Dans ce cas, vous pourriez avoir besoin pour mettre en œuvre un "display_name" sur votre MyJob objet. travail.nom de l'utiliser si elle existe
class MyJob < Struct.new(:user_id);
def perform
# ...
end
def display_name
return "MyJob-User-#{user_id}"
end
end
# store reference to a User
my_job = MyJob.new(User.first.id) # users.id is 1
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob-User-1"
job.handler
# => "--- !ruby/struct:MyJob \nuser_id: 1\n"
de cette façon, vous pourriez être plus sélectif sur les enregistrements à supprimer?
j'espère que cela vous donne assez d'informations sur les possibilités de façons de le gérer?
delay_job 3 a introduit un attribut queue
. Cela peut être détourné pour planifier un travail annulable.
class MyJob < Struct.new(:user_id)
def self.queue_name
"something-unique"
end
def perform
# ...
end
end
#scheduler
my_job = MyJob.new(User.first.id)
#'cancel' pending jobs first
Delayed::Job.where(queue: my_job.class.queue_name).destroy_all
#queue it up
Delayed::Job.enqueue(my_job,
queue: my_job.class.queue_name,
run_at: 1.hour.from_now
)