J'ai une tâche de râteau où je fais quelques vérifications au début, si l'une des vérifications échoue, je voudrais revenir tôt de la tâche de râteau, je ne veux pas exécuter le code restant.
Je pensais que la solution serait de placer un retour là où je voulais revenir du code mais j'obtiens l'erreur suivante
unexpected return
break
et j'ai cette erreur: rake avorté! pause de proc-fermeture (Voir la trace complète en exécutant la tâche avec --trace)next
ne fonctionne que s'il y a un "niveau" de bloc pour sortir.Vous pouvez utiliser
abort(message)
de l'intérieur de la tâche pour abandonner cette tâche avec un message.la source
next
. Aimer.J'ai tendance à utiliser
abort
ce qui est une meilleure alternative dans de telles situations, par exemple:la source
abort
sans sortir avec un1
code de sortie? Les tâches de râteau sont souvent utilisées dans la ligne de commande pour déterminer le succès ou l'échec. Y a-t-il un "succès"abort
?exit
est un bon moyen de quitter avec succès.Retour avec une erreur ❌
Si vous revenez avec une erreur (c'est-à-dire un code de sortie de
1
) que vous voudrez utiliserabort
, qui prend également un paramètre de chaîne facultatif qui sera sorti à la sortie:Sur la ligne de commande:
Retour avec succès ✅
Si vous revenez sans erreur (c'est-à-dire un code de sortie de
0
) que vous voudrez utiliserexit
, qui ne prend pas de paramètre de chaîne.Sur la ligne de commande:
Ceci est important si vous l'utilisez dans un travail cron ou quelque chose qui doit faire quelque chose par la suite selon que la tâche de râteau a réussi ou non.
la source
Si vous devez sortir de plusieurs niveaux de bloc, vous pouvez utiliser fail .
Par exemple
(Voir https://stackoverflow.com/a/3753955/11543 .)
la source
Si vous vouliez quitter une tâche de râteau sans provoquer le "râteau abandonné!" message à imprimer, vous pouvez alors utiliser soit "abandonner", soit "quitter". Mais "abandonner", lorsqu'il est utilisé dans un bloc de secours, met fin à la tâche et affiche toute l'erreur (même sans utiliser --trace). Donc, "quitter" est ce que j'utilise.
la source
J'ai utilisé l'
next
approche suggérée par Simone Carletti, car lors du test de la tâche de râteauabort
, qui n'est en fait qu'un wrapperexit
, ce n'est pas le comportement souhaité.Exemple:
la source