У меня есть задача rake, в которой я делаю некоторые проверки в начале, если одна из проверок не удалась, я хотел бы вернуться рано из задачи rake, я не хочу выполнять какой-либо оставшийся код.
Я думал, что решение было бы разместить возврат, где я хотел бы вернуться из кода, но я получаю следующую ошибку
unexpected return
break
и у меня есть эта ошибка: грабли прерваны! перерыв от PROC-закрытия (Полный след, выполнив задачу с --trace)next
работает, только если на «уровне» блока вырваться наружу.Вы можете использовать
abort(message)
внутри задачи, чтобы отменить эту задачу с сообщением.источник
next
. Любить это.Я склонен использовать,
abort
которая является лучшей альтернативой в таких ситуациях, например:источник
abort
без выхода с1
кодом выхода? Rake-задачи часто используются в командной строке для определения успеха или неудачи. Есть ли «успешный»abort
?exit
это хороший способ успешно выйти.Вернуться с ошибкой ❌
Если вы возвращаетесь с ошибкой (то есть с кодом выхода
1
), которую вы захотите использоватьabort
, она также принимает необязательный строковый параметр, который будет выведен при выходе:В командной строке:
Возвращайся с успехом ✅
Если вы возвращаетесь без ошибки (то есть кода выхода
0
), вы захотите использовать егоexit
, который не принимает строковый параметр.В командной строке:
Это важно, если вы используете это в задании cron или в чем-то, что впоследствии должно быть выполнено в зависимости от того, была ли успешна задача rake или нет.
источник
Если вам нужно выйти из нескольких уровней блоков, вы можете использовать fail .
Например
(См. Https://stackoverflow.com/a/3753955/11543 .)
источник
Если вы имели в виду выход из задачи по рейку, не вызывая "рейк отменен!" сообщение, которое будет напечатано, тогда вы можете использовать «abort» или «exit». Но «abort», когда используется в блоке восстановления, завершает задачу, а также печатает всю ошибку (даже без использования --trace). Так что «выход» - это то, что я использую.
источник
Я использовал
next
подход, предложенный Симон Карлетти, так как при тестировании рейка задача,abort
которая на самом деле является просто оберткойexit
, не соответствует желаемому поведению.Пример:
источник