2012-07-05 2 views
1

Ruby에서 AWS SDK를 사용하여 NoSuchBucket 오류를 잡으려고했습니다. 문제는 내 구조 블록이 오류를 잡아 내지 않아서 내 앱이 다운되는 것입니다. 여기에 관련 코드 :AWS S3 NoSuchBucket 예외가 구조 절에 붙잡혀 있지 않습니다.

begin 
    b = s3.buckets[bucket_name] 

rescue AWS::S3::Errors::NoSuchBucket 
    puts Invalid bucket name. 
    exit 1 
end 

는 에러 메시지는 다음과 같습니다

C:/Ruby193/lib/ruby/gems/1.9.1/gems/aws-sdk-1.5.6/lib/aws/core/client.rb:277:in 
`return_or_raise': The specified bucket does not exist (AWS::S3::Errors::NoSuchBucket) 

난 그냥 바보 같은 초보자 구문 오류를 만드는 중이라서, 또는이 실제로 던지는되지 년대 AWS 코드의 버그 오류? 나는 또한 모든 오류를 잡으려고 시도했지만 여전히 주사위를 잡으려고 노력했습니다.

답변

3
b = s3.buckets[bucket_name] 

은 실제로 요청을하지 않으며, 절대 그런 일 없을 NoSuchBucket 같은 예외 통해.

이름이 무엇인지 아는 버킷 개체 만 반환합니다. 요청은 실제로 버킷 (내용을 나열하고 파일을 추가 함)을 사용하여 무언가를하려고 할 때만 발생하며이 시점에서 NoSuchBucket이 발생합니다. 이것은 사용자의 begin 블록 외부이므로 rescue이 처리하지 못합니다. 그 예외를 구해야 할 필요가 있다면 실제로 양동이를 사용하는 곳을 시작/구출해야합니다. 당신은 그냥 실제로 당신이

s3.buckets[bucket_name].exists? 
+0

그냥 메모 같은 것을 할 수있는 존재 함을 확인하려는 경우

의'.exists은?'작동하지 않았다. 버킷을 잡기 위해'[]'를 사용하거나 객체를 잡기 위해'[]'를 사용하는 버킷은 오류를 던지지 않고 객체에 쓰려고 할뿐입니다. 오류가 실제로 어디에서 던져 지는지 확인해 주셔서 감사합니다. – cliclcly

+1

.exists? 오류를 캐치하고 true/false를 반환합니다. –