Comment échouer explicitement une tâche dans Ruby Rake?

Disons que j’ai un fichier de rake comme celui-ci:

file 'file1' => some_dependencies do sh 'external tool I do not have control over, which sometimes fail to create the file' ??? end task :default => 'file1' do puts "everything's OK" end 

Maintenant, si je ne mets rien à la place de ???, j’obtiens le message OK, même si l’outil externe ne parvient pas à générer le fichier. Quelle est la bonne façon d’informer le rake, la tâche «file1» a échoué et elle devrait s’interrompre (en espérant présenter un message significatif – comme si la tâche a échoué) – la seule chose à laquelle je puisse penser maintenant ne semble pas juste.

PS L’outil renvoie toujours 0 comme code de sortie.

Utilisez la méthode raise ou fail comme pour tout autre script Ruby ( fail est un alias pour raise ). Cette méthode prend une chaîne ou une exception comme argument utilisé comme message d’erreur à la fin du script. Cela provoquera également le retour de la valeur 1 au shell appelant. C’est documenté ici et d’autres endroits.

Vous pouvez utiliser abort("message") pour échouer avec succès à la tâche de rake.

Il imprimera le message à stdout et quittera avec le code 1.

Le code de sortie 1 est une défaillance des systèmes de type Unix.

Voir Kernel # abort pour plus de détails.