2012-07-05 141 views
1

我試圖在Ruby中使用AWS開發工具包獲取存儲桶,並嘗試捕獲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 2012-07-05 21:11:07

+1

。是否存在?捕獲錯誤並返回true/false – 2012-07-05 21:11:41