AWS S3 + Ruby SDK:如何列出存储桶

时间:2013-12-05 11:17:28

标签: ruby amazon-web-services amazon-s3

我正在运行相当简单的程序来列出S3存储桶。有两种方法。但是,这两种方法都给我同样的错误。

方法1: Create a s3 client and then access the client methods(list_buckets).

代码:

#!/usr/bin/ruby
require 'aws-sdk'
require 'awesome_print'
AWS.config( :access_key_id      => 'My Access Key', 
            :secret_access_key  => 'My Secret Key',
            :region             => 'us-west-2')

s3 = AWS.s3
puts s3.client.list_buckets()

输出:

/var/lib/gems/1.9.1/gems/aws-sdk-1.14.1/lib/aws/s3/client.rb:459:in `block (2 levels) in <class:Client>': uninitialized constant AWS::Core::XML::ListBuckets (NameError)

方法2: Create a Bucket Object and then Enumerate it

代码:

#!/usr/bin/ruby
require 'aws-sdk'
require 'awesome_print'
AWS.config( :access_key_id      => 'My Access Key', 
            :secret_access_key  => 'My Secret Key',
            :region             => 'us-west-2')

s3obj = AWS::S3.new
s3obj.buckets.each do |bucket|
  puts bucket
end

输出:

/var/lib/gems/1.9.1/gems/aws-sdk-1.14.1/lib/aws/s3/client.rb:459:in `block (2 levels) in <class:Client>': uninitialized constant AWS::Core::XML::ListBuckets (NameError)

我在这里做错了什么? AFAIK,我的代码遵循每种方法中提到的内容。这是列出存储桶的最基本代码,我对它失败了。

1 个答案:

答案 0 :(得分:1)

在仔细阅读错误后,我找到了aws-sdk-1.14.1。然后我检查了AWS并意识到他们发布了更新版本的Ruby SDK。那是1.29.1

  1. 所以我从我的ubuntu清理了AWS SDK 1.14.1。
  2. 也删除了红宝石。 (这是1.9.1)
  3. 已安装ruby 1.9.2 from source
    • 新的AWS-SDK需要更新的Ruby
    • 更准确地说,较新版本的AWS-SDK有更新版本的nokogiri,而后者又需要ruby 1.9.2或更高版本。
    • 所以我最终从源代码安装ruby 1.9.2,因为我的Ubuntu是10.04,这是相当古老的,它的apt-get repo仅提供ruby 1.9.1
  4. 已安装AWS-SDK 1.29.1
  5. 现在我的代码上方都工作得很好。

    因此,可能是导致错误的旧版SDK。