갈퀴 작업에서 일찍 돌아 오려면 어떻게해야합니까?
처음에 검사를하는 레이크 작업이 있습니다. 검사 중 하나가 실패하면 레이크 작업에서 일찍 반환하고 싶습니다. 남은 코드를 실행하고 싶지 않습니다.
해결책은 코드에서 반환하고 싶었던 곳에 반환하는 것이지만 다음과 같은 오류가 발생한다고 생각했습니다.
unexpected return
레이크 작업은 기본적으로 블록입니다. 람다를 제외한 블록은 리턴을 지원하지 않지만 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
나는 두 번째 선택을 선호합니다.
abort(message)
작업 내부에서 메시지를 사용 하여 해당 작업을 중단 할 수 있습니다 .
나는 abort
그러한 상황에서 더 나은 대안 을 사용 하는 경향이 있습니다 .
task :foo do
something = false
abort 'Failed to proceed' unless something
end
여러 블록 수준에서 벗어나 려면 fail 을 사용할 수 있습니다.
예를 들어
task :something do
[1,2,3].each do |i|
...
fail "some error" if ...
end
end
https://stackoverflow.com/a/3753955/11543을 참조 하십시오 .
"갈퀴 중단"을 유발하지 않고 갈퀴 작업을 종료하려는 경우 메시지가 인쇄되면 "중단"또는 "종료"를 사용할 수 있습니다. 그러나 복구 블록에서 사용될 때 "중단"은 작업을 종료하고 전체 오류 (--trace를 사용하지 않더라도)를 인쇄합니다. 그래서 "종료"는 내가 사용하는 것입니다.
오류로 반환 ❌
오류 (예 : 종료 코드 ) 와 함께 반환 하는 경우을 1
사용하려고합니다 abort
.이 옵션은 종료시 출력되는 선택적 문자열 매개 변수를 사용합니다.
task :check do
errors = get_errors
abort( "There are #{errors.count} errors!" ) if errors.any?
# Do remaining checks...
end
명령 행에서 :
$ rake check && echo "All good"
#=> There are 2 errors!
성공으로 돌아 가기 ✅
If you're returning without an error (i.e. an exit code of 0
) you'll want to use exit
, which does not take a string param.
task :check do
errors = get_errors
exit if errors.empty?
# Process errors...
end
On the command line:
$ rake check && echo "All good"
#=> All good
This is important if you're using this in a cron job or something that needs to do something afterwards based on whether the rake task was successful or not.
I used next
approach suggested by Simone Carletti, since when testing rake task, abort
, which in fact is just a wrapper for exit
, is not the desired behavior.
Example:
task auto_invoice: :environment do
if Application.feature_disabled?(:auto_invoice)
$stderr.puts 'Feature is disabled, aborting.'
next
end
참고URL : https://stackoverflow.com/questions/2316475/how-do-i-return-early-from-a-rake-task
'IT story' 카테고리의 다른 글
폴더 자체없이 GitHub 리포지토리의 내용 복제 (0) | 2020.04.29 |
---|---|
ExpandoObject에 동적으로 속성 추가 (0) | 2020.04.29 |
UNIX에서 디렉토리 만 나열 (0) | 2020.04.29 |
LINQ를 사용한 여러 주문 방법 (0) | 2020.04.29 |
리눅스 커맨드 라인에서 sha256 생성하기 (0) | 2020.04.29 |