Je me demande comment accédez-vous à ActiveJob Effectuer des paramètres dans le bloc de réutilisation, tels que
def perform object end rescue_from Exception do |e| if e.class != ActiveRecord::RecordNotFound **job.arguments.first** # do something end end
3 Réponses :
Je n'avais aucune idée de cela aussi, alors décidé simplement d'essayer d'utiliser auto code> à l'intérieur du bloc de sauve_from code> de
et fonctionnait.
rescue_from(StandardError) do |ex|
puts ex.inspect
puts self.job_id
# etc.
end
Rescue_From () ne fonctionne que avec des exceptions à partir de StandardError Down: GITUB.com/Rails/Rails / Problèmes / 28874 # Issuecomment-297599254
Il est possible avec Ceci fonctionne également pour les rappels (par exemple, à l'intérieur arguments code> à l'intérieur du
Rescue_from code> Bloc:
after_perform code>). p> p>
Merci, cela a travaillé pour moi (Rails 5.0.1, Sidekiq 4.2.9). Dans le sauve_from code> bloc,
argument [0] code> m'a donné le premier argument qui a été transmis à
exécuter code>.
Vous pouvez accéder à tous liaisons par alors vous pouvez obtenir toutes les variables locales avec donc pour vous exemple: p> 1. Il est toujours possible que cette liaison ne soit pas celle de ex.bindings code>. Pour vous assurer que vous obtenez la liaison correcte pour votre travail, vous devez vérifier le récepteur comme celui-ci 1 sup>:
. local_variable_get code>. Étant donné que les arguments de la méthode sont également des variables locales, vous pouvez au moins explicitement les chercher: p>
Effectuer code> si vous appelez d'autres méthodes d'instance dans la méthode de votre travail et que l'erreur se produit. Cela peut également être pris en compte mais est laissé de côté pour la brièveté. Sub> p> p>
Où est l'exception survenue? Dans la méthode d'exécution? Si tel est le cas, placez simplement votre bloc de sauvetage sous le code de coupable dans la méthode d'exécution. Vous aurez accès au paramètre code> objet code> en tant que variable locale.
Noz, j'ai avant_enqueue et autour_performez aussi bien que le sauvetage_from.
Je n'ai utilisé ni de ceux-ci auparavant, mais pouvez-vous ne pas placer votre bloc de sauvetage dans l'un ou l'autre de ces blocs? Je ne pense pas que vous souhaitiez utiliser
sauve_from code> dans votre activejob, un simple
Rescue Actoverecord :: RecordNotFound => E code> devrait suffire.
Il est définitivement pris en charge (et utile) à utiliser
sauve_from code> dans Activejobs: EDGEGUIDES .RubyonRails.org / actif_job_basics.html # Exceptions Spécifiquement, il est très utile dans une classe de base d'emploi (où des échecs similaires peuvent être consolidés à un
sauve_from code> plutôt que copié dans une douzaine
Effectuez code> blocs).