259 votes

Comment revenir plus tôt d'une tâche de ratissage ?

J'ai une tâche rake dans laquelle je fais quelques vérifications au début, si l'une des vérifications échoue, je voudrais revenir plus tôt de la tâche rake, je ne veux pas exécuter le code restant.

Je pensais que la solution serait de placer un retour à l'endroit où je voulais retourner du code mais j'obtiens l'erreur suivante

unexpected return

9voto

ZX12R Points 1321

Si vous voulez sortir d'une tâche rake sans provoquer l'impression du message "rake aborted !", alors vous pouvez utiliser "abort" ou "exit". Mais "abort", lorsqu'il est utilisé dans un bloc de secours, met fin à la tâche et affiche l'erreur complète (même sans utiliser --trace). C'est donc "exit" que j'utilise.

3 votes

En général, je pense que l'utilisation de "exit" au lieu de return/break est une mauvaise idée puisqu'il ne s'agit pas simplement de sortir de l'espace de travail de l'utilisateur. actuel proc/method/etc. -- il quitte l'ensemble du processus et saute tout code que la méthode appelante peut avoir prévu d'être exécuté par la suite (y compris éventuellement un nettoyage). Mais pour une tâche rake, je suppose que ce n'est probablement pas un problème...

0 votes

"abort", lorsqu'il est utilisé dans un bloc de sauvetage, met fin à la tâche et affiche l'erreur complète (même sans utiliser --trace). Vous aviez raison avec ça ! Je ne l'ai trouvé nulle part ailleurs. J'ai mis à jour ma réponse pour l'indiquer également. Merci.

0voto

Artur Beljajev Points 11

J'ai utilisé next approche suggérée par Simone Carletti, puisque lors du test de la tâche rake, abort qui, en fait, n'est qu'une enveloppe pour la fonction exit n'est pas le comportement souhaité.

Exemple :

task auto_invoice: :environment do
  if Application.feature_disabled?(:auto_invoice)
    $stderr.puts 'Feature is disabled, aborting.'
  next
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X