2015-03-03 178 views
5

任何一个可以给我提供了良好的文档使用ASW-SDK版本2,我检查了主文档和V1我们用来做像AWS SDK V2为S3

s3 = AWS::S3.new 
obj = s3.buckets['my-bucket'] 

现在将文件上传到S3在V2当我尝试为

s3 = Aws::S3::Client.new 

我结束了

Aws::Errors::MissingRegionError: missing region; use :region option or export region name to ENV['AWS_REGION'] 

谁能帮助我?

+0

下面是文档:http://docs.aws.amazon.com/sdkforruby/api/index.html,你应该找到你所需要的一切。 – 2015-03-03 05:58:07

回答

3

按照官方documentation

To use the Ruby SDK, you must configure a region and credentials.

因此,

s3 = Aws::S3::Client.new(region:'us-west-2') 

另外,默认区域可以从下列位置之一加载:

Aws.config[:region] 
ENV['AWS_REGION'] 
+0

我的问题在于访问存储桶。以前我们有一个方法来访问's3.buckets ['my-bucket']'。它看起来像版本2中更改。 – user3655415 2015-03-03 06:38:39

+0

它应该是's3.bucket ['my-bucket']' – shivam 2015-03-03 06:40:15

+1

是的,我尝试过,但结果没有方法错误。 [8] pry(main)> s3 = Aws :: S3 :: Client.new(region:'us-west-2') =># (main)> s3.bucket [ENV ['AWS_BUCKET']] NoMethodError:未定义的方法'bucket'for# user3655415 2015-03-03 07:00:19

2

下面是一个完整aws v2 gem上的S3演示,适用于我:

Aws.config.update(
    region: 'us-east-1', 
    credentials: Aws::Credentials.new(
    Figaro.env.s3_access_key_id, 
    Figaro.env.s3_secret_access_key 
) 
) 
s3 = Aws::S3::Client.new 
resp = s3.list_buckets 
puts resp.buckets.map(&:name) 

Gist

Official list of AWS region IDs here.

如果你不确定该地区,最好的猜测是美国标准,它具有ID us-east-1用于配置目的,如上图所示。

1

如果您使用的是aws.yml文件在Rails的凭据,您可能希望创建一个文件config/initializers/aws.rb,内容如下:

filename = File.expand_path(File.join(Rails.root, "config", "aws.yml")) 
config = YAML.load_file(filename) 
aws_config = config[Rails.env.to_s].symbolize_keys 

Aws.config.update({ 
        region: aws_config[:region], 
        credentials: Aws::Credentials.new(aws_config[:access_key_id], aws_config[:secret_access_key]) 
       }) 

config/aws.yml文件将需要适配器包括区域。

development: &development 
    region: 'your region' 
    access_key_id: 'your access key' 
    secret_access_key: 'your secret access key' 
production: 
    <<: *development