답변:
레이크 작업은 기본적으로 블록입니다. 람다를 제외한 블록은 리턴을 지원하지 않지만 next
레이크 작업에서 메소드에서 리턴을 사용하는 것과 동일한 효과를 사용 하는 다음 명령문으로 건너 뛸 수 있습니다 .
task :foo do
puts "printed"
next
puts "never printed"
end
또는 메소드에서 코드를 이동하고 메소드에서 return을 사용할 수 있습니다.
task :foo do
do_something
end
def do_something
puts "startd"
return
puts "end"
end
나는 두 번째 선택을 선호합니다.
break
이 오류가 발생했습니다 : 갈퀴가 중단되었습니다! proc-closure에서 벗어나기 (--trace로 작업을 실행하여 전체 추적 참조)
next
탈출 할 블록의 "레벨"에있는 경우에만 작동합니다.
abort(message)
작업 내부에서 메시지를 사용 하여 해당 작업을 중단 할 수 있습니다 .
next
합니다. 그것을 사랑하십시오.
나는 abort
그러한 상황에서 더 나은 대안 을 사용 하는 경향이 있습니다 .
task :foo do
something = false
abort 'Failed to proceed' unless something
end
abort
로 1
종료 하지 않고 어떻게합니까 ? 레이크 작업은 종종 명령 줄에서 성공 또는 실패를 결정하는 데 사용됩니다. "성공"이 abort
있습니까?
exit
성공적으로 종료하는 좋은 방법 처럼 보입니다 .
오류 (예 : 종료 코드 ) 와 함께 반환 하는 경우을 1
사용하려고합니다 abort
.이 옵션은 종료시 출력되는 선택적 문자열 매개 변수를 사용합니다.
task :check do
# If any of your checks fail, you can exit early like this.
abort( "One of the checks has failed!" ) if check_failed?
end
명령 행에서 :
$ rake check && echo "All good"
#=> One of the checks has failed!
당신이 반환하는 경우 없이 (즉, 종료 코드 오류 0
)를 사용하는 것이 좋습니다 exit
, 이는 하지 않는 문자열 PARAM을.
task :check do
# If any of your checks fail, you can exit early like this.
exit if check_failed?
end
명령 행에서 :
$ rake check && echo "All good"
#=> All good
cron 작업에서이 작업을 사용하는 경우 또는 레이크 작업의 성공 여부에 따라 나중에 무언가를 수행해야하는 경우에 중요합니다.
"갈퀴가 중단되었습니다!"를 발생시키지 않고 갈퀴 작업을 종료하려는 경우 메시지가 인쇄되면 "중단"또는 "종료"를 사용할 수 있습니다. 그러나 복구 블록에서 사용될 때 "중단"은 작업을 종료하고 전체 오류를 인쇄합니다 (--trace를 사용하지 않더라도). 그래서 "종료"는 내가 사용하는 것입니다.
나는 next
Simone Carletti가 제안한 접근 방식을 사용 했다. 왜냐하면 갈퀴 작업을 테스트 할 때 abort
실제로 래퍼 일뿐 아니라 exit
원하는 동작이 아니기 때문이다.
예:
task auto_invoice: :environment do
if Application.feature_disabled?(:auto_invoice)
$stderr.puts 'Feature is disabled, aborting.'
next
end