갈퀴 작업에서 일찍 돌아오려면 어떻게 해야 합니까?
처음에 몇 가지 검사를 하는 레이크 작업이 있는데, 검사 중 하나가 실패하면 레이크 작업에서 조기에 돌아와 나머지 코드를 실행하고 싶지 않습니다.
코드에서 반환하고 싶은 곳에 반환을 하는 것이 해결책일 것이라고 생각했는데 다음 오류가 발생합니다.
unexpected return
레이크 작업은 기본적으로 블록입니다.람다를 제외한 블록은 반환을 지원하지 않지만 다음 문장으로 건너뛸 수 있습니다.next
갈퀴 작업에서 방법에 리턴을 사용하는 것과 동일한 효과를 갖는 것.
task :foo do
puts "printed"
next
puts "never printed"
end
또는 메서드에서 코드를 이동하고 메서드에서 반환을 사용할 수 있습니다.
task :foo do
do_something
end
def do_something
puts "startd"
return
puts "end"
end
저는 두 번째 선택을 선호합니다.
사용할 수 있습니다.abort(message)
작업 내부에서 메시지와 함께 해당 작업을 중단합니다.
오류 ❌와 함께 반환
오류(예: 종료 코드)를 반환하는 경우1
를 사용할 수 있으며, 종료 시 출력되는 선택적 문자열 매개변수도 사용할 수 있습니다.
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
문자열 매개 변수를 사용하지 않는 를 사용할 수 있습니다.
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
이것은 크론 작업에서 이 작업을 사용하거나 레이크 작업의 성공 여부에 따라 나중에 무언가를 수행해야 하는 경우에 중요합니다.
보너스: 오류와 함께 반환rescue
스택 추적이 없는 블록.
기본적으로 사용할 경우abort
의 내부에rescue
블록, 당신이 단지 사용하더라도, 그것은 전체 스택 추적을 출력할 것입니다.abort
오류를 다시 제기하지 않고.
이 문제를 해결하려면 0이 아닌 종료 코드를 다음에 제공할 수 있습니다.exit
명령, 예:
task :check do
begin
do_the_thing_that_raises_an_exception
rescue => error
puts error.message
exit( 1 )
end
end
사용하는 편입니다.abort
이러한 상황에서 더 나은 대안은 다음과 같습니다.
task :foo do
something = false
abort 'Failed to proceed' unless something
end
여러 블럭 수준을 분리해야 하는 경우 실패를 사용할 수 있습니다.
예를들면
task :something do
[1,2,3].each do |i|
...
fail "some error" if ...
end
end
(https://stackoverflow.com/a/3753955/11543.) 참조)
"rake aborted!" 메시지를 인쇄하지 않고 레이크 작업을 종료하는 것을 의미하는 경우 "abort" 또는 "exit"를 사용할 수 있습니다.그러나 "abort"는 복구 블록에 사용될 때 작업을 종료하고 전체 오류를 인쇄합니다(--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
언급URL : https://stackoverflow.com/questions/2316475/how-do-i-return-early-from-a-rake-task
'programing' 카테고리의 다른 글
WooCommerce에서 결제가 없는 경우 X일 후 자동으로 주문 취소 (0) | 2023.06.11 |
---|---|
Mysql 로드의 임의 피크가 모든 사용자를 느리게 함 (0) | 2023.06.11 |
새 행을 삽입할 때 수식을 다음 행에 복사 (0) | 2023.06.11 |
WPF 단추 텍스트 래핑 스타일 (0) | 2023.06.11 |
문자열 및 변수 내용을 동일한 줄에 R로 인쇄 (0) | 2023.06.11 |