Eu tenho uma tarefa de rake em que faço algumas verificações no início. Se uma das verificações falhar, gostaria de retornar mais cedo da tarefa de rake, não quero executar nenhum código restante.
Eu pensei que a solução seria colocar um retorno onde eu queria retornar do código, mas eu recebo o seguinte erro
unexpected return
break
e tenho este erro: rake abortado! romper com proc-fechamento (Veja traço cheio executando tarefa com --trace)next
só funciona se houver um "nível" de bloco para romper.Você pode usar
abort(message)
de dentro da tarefa para interromper a tarefa com uma mensagem.fonte
next
. Adoro.Costumo usar
abort
qual é a melhor alternativa em tais situações, por exemplo:fonte
abort
sem sair com um1
código de saída? As tarefas de rake são frequentemente usadas na linha de comando para determinar o sucesso ou o fracasso. Existe um "sucesso"abort
?exit
é uma boa maneira de sair com sucesso.Retornar com um erro ❌
Se você estiver retornando com um erro (ou seja, um código de saída de
1
), você desejará usarabort
, o que também exige um parâmetro de string opcional que será gerado na saída:Na linha de comando:
Retorne com sucesso ✅
Se você estiver retornando sem um erro (ou seja, um código de saída de
0
), você desejará usarexit
, o que não exige um parâmetro de string.Na linha de comando:
Isso é importante se você estiver usando isso em um trabalho cron ou algo que precise fazer algo posteriormente com base em se a tarefa rake foi bem-sucedida ou não.
fonte
Se você precisar romper vários níveis de bloco, poderá usar falha .
Por exemplo
(Consulte https://stackoverflow.com/a/3753955/11543 .)
fonte
Se você pretendia sair de uma tarefa de rake sem causar o "rake abortado!" mensagem a ser impressa, você pode usar "abortar" ou "sair". Mas "abortar", quando usado em um bloco de recuperação, finaliza a tarefa e imprime todo o erro (mesmo sem usar --trace). Então "exit" é o que eu uso.
fonte
eu usei
next
abordagem sugerida por Simone Carletti, já que o teste da tarefa de rakeabort
, que na verdade é apenas um invólucroexit
, não é o comportamento desejado.Exemplo:
fonte