0

Création d'un travail en arrière-plan avec la gemme resque_scheduler sur le serveur Redis.Rails mis (wait: 2.minutes) méthode pour le travail actif ne fonctionne pas

class Estamps::OrderAssignment < ActiveRecord::Base 

    after_save :enqueue_check_status 

    def enqueue_check_status 
     AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id) 
    end 
end 

class AutoRejectionJob < ActiveJob::Base 
    queue_as :default 

    def perform(*args) 
    order_assignment_id = args[0] 
    order_assignment = Estamps::OrderAssignment.find(order_assignment_id) 
    if order_assignment.status_id == 1 || order_assignment.status_id == nil 
     order_assignment.status_id = 3 
     order_assignment.save! 
    end 
    end 
end   

Lors de la création de l'enregistrement OrderAssignment ou lorsque mis à jour au bout de 2 minutes, il devrait fonctionner AutoRejection Job. Ici, le prob est l'ensemble (attente: 2.minutes) ne semble pas fonctionner, à savoir

AutoRejectionJob.perform_later(self.id) 

fonctionne parfaitement bien, mais

AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id) 

ne fait rien. Je n'ai pas été capable de rectifier le problème. Newbie to Rails alors s'il vous plaît aider.

Répondre

0

Je ne vois aucun problème avec votre code. J'ai vérifié: .set(wait: 2.minutes) fonctionne comme prévu dans les rails 5.0.2 sur le dessus de rubis 2.4.0

Ainsi fait votre appel du travail. La façon dont je le vois, vous essayez de définir un statut utilisé ailleurs. Probablement, l'erreur est due à l'OrderAssignment manipulés dans un traitement à l'extérieur (détruit?)

Puisque vous avez dit que vous êtes nouveau sur les rails (je suppose que ce que « débutant » signifie) Je vais faire un peu suggestions. Ignorez-les si vous êtes passé ...

Il existe également d'excellents outils de débogage pour vous aider à trouver ce qui se passe: byebug, better_errors, pry et bien sûr, le rails console. Faites-vous plaisir: essayez-les.

Quand je ne peux pas trouver mon chemin un comportement qui va au-delà de ma portée, j'utilise des « puts », et certaines structures « essayer/erreurs de capture » (sauvetage commencent à assurer ruby) ...:

def perform(*args) 
    puts "@@@@@@@ JOB TRIGGERED @@@@@@" 
    begin 
    order_assignment_id = args[0] 
    order_assignment = Estamps::OrderAssignment.find(order_assignment_id) 
    puts "#{order_assignment.inspect}" 
    if order_assignment.status_id == 1 || order_assignment.status_id == nil 
     order_assignment.status_id = 3 
     order_assignment.save! 
    end 
    puts "@@@@@@@ JOB DONE @@@@@@" 
    rescue StandardError => e 
    # ... display e.message ... 
    ensure 
    #... 
    end 
end