2015-03-03 192 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