2013-08-29 5 views
5

을 다시 시도 내 스크립트에 다음 코드를 ...이루비 구조 및 특정 코드 블록

begin 
    #Loop to create 1000 emails... 
    #Loop to send 1000 emails... 

    rescue Timeout::Error => e 
    retry_attempts += 1 
    if retry_attempts < 10 
     retry 
    else 
     puts "Timeout error, deleting emails...".red 
     logs.puts("Rescued a timeout error...#{e}") 
     email_ids_all.each do |email_delete| 
     #delete all email... 
     end 

내 질문은 retry 실제로 "다시 시도"것입니다 것입니다. 스크립트가 이미 하나의 루프에서 1000 개의 전자 메일을 생성하고 다른 루프에서 999 개를 보낸 다음 1000 번째 전자 메일을 보낼 때 시간 초과됩니다 .- 오류가 발생한 특정 코드 줄을 다시 시도 할 것인가? 1000 번째 이메일을 통해 전체 루프를 시작할지 또는 두 루프를 실행하는 스크립트의 시작 부분에서 시작할지 여부를 결정합니다.

저는 1.9.3 루비를 사용하고 있습니다. 귀하의 경우 전자 메일 루프가 다시 실행 모든에 있도록

답변

10

retry전체begin 블록을 실행합니다.

begin 
    (1..10).each do |x| 
    puts x 
    if x > 6 
     STDIN.gets # press enter to do another iteration 
     raise ArgumentException 
    end 
    end 
rescue 
    retry # loop will restart from 1 
end 
+0

잘 알고 :

여기 (이 루프를 무한하므로, CTRL-C로 종료) 지속적으로 1 ~ 7 정수 인쇄됩니다 빠른 예입니다. 도와 주셔서 감사합니다. – Luigi

+3

다음은 루프에서 '재시도'사용에 관한 정말 좋은 게시물입니다. http://blog.mirthlab.com/2012/05/25/cleanly-retrying-blocks-of-code-after-an-exception-in-ruby / – dennismonsewicz