Ruby on rails 访问AWS S3帐户的存储桶时出现问题

Ruby on rails 访问AWS S3帐户的存储桶时出现问题,ruby-on-rails,ruby-on-rails-3,amazon-s3,Ruby On Rails,Ruby On Rails 3,Amazon S3,我试图在irb控制台中建立与aws s3帐户的连接- AWS::S3::Base.establish_connection!(:access_key_id => 'my access key', :secret_access_key => 'my secret key', :server => "s3-ap-southeast-1.amazonaws.com") 它工作得很好,并提示了这一点- => #<AWS::S3::Connection:0x8cd86d0

我试图在irb控制台中建立与aws s3帐户的连接-

AWS::S3::Base.establish_connection!(:access_key_id => 'my access key', :secret_access_key => 'my secret key', :server => "s3-ap-southeast-1.amazonaws.com")
它工作得很好,并提示了这一点-

=> #<AWS::S3::Connection:0x8cd86d0 @options={:server=>"s3-ap-southeast-1.amazonaws.com", :port=>80, :access_key_id=>"my access key", :secret_access_key=>"my secret key"}, @access_key_id="my access key", @secret_access_key="my secret key", @http=#<Net::HTTP s3-ap-southeast-1.amazonaws.com:80 open=false>>
它正确地获取了我帐户中的所有存储桶-

=> [#<AWS::S3::Bucket:0x8d291fc @attributes={"name"=>"bucket1", "creation_date"=>2011-06-28 10:08:58 UTC}, @object_cache=[]>,
#<AWS::S3::Bucket:0x8d291c0 @attributes={"name"=>"bucket2", "creation_date"=>2011-07-04 07:15:21 UTC}, @object_cache=[]>,
#<AWS::S3::Bucket:0x8d29184 @attributes={"name"=>"bucket3", "creation_date"=>2011-07-04 07:39:21 UTC}, @object_cache=[]>]
它向我显示了以下错误:

AWS::S3::PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/error.rb:38:in `raise'
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:72:in `request'
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:88:in `get'
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:102:in `find'
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:145:in `objects'
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:313:in `reload!'
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:242:in `objects'
    from /home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:253:in `each'
    from (irb):5
    from /home/surya/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in `<main>'
AWS::S3::PermanentRedirect:您试图访问的存储桶必须使用指定的端点寻址。请将所有未来请求发送到此终结点。
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/error.rb:38:in'raise'
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:72:在“请求”中
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:88:in'get'
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:102:在“查找”中
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:145:在“对象”中
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:313:in'reload!'
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:242:在“对象”中
from/home/surya/.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:253:in'each'
来自(irb):5
from/home/surya/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in`'

我不明白为什么会发生这样的事情,因为昨天同样的事情运作良好。猜猜看??我在这里遗漏了什么吗???

在连接之前,请尝试使用

AWS::S3::DEFAULT_HOST.replace "s3-ap-southeast-1.amazonaws.com"
您可以做的另一件事(尽管这不是一个好的解决方案)是使用数组索引访问bucket

AWS::S3::Bucket.list[0]

在这里我也遇到了这个问题。由于我住在巴西,我尝试创建一个圣保罗桶,在我删除它并使用美国标准桶之后,一切都很顺利。

aws地区必须设置为美国标准才能访问S3桶


在Linux命令行中,运行:
export AWS\u DEFAULT\u REGION=“us standard”

如果有人遇到问题,您试图为不同的平台执行不同的区域,您可以如下设置配置:

AWS.config({
    :region => 'us-west-2',
    :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
    :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
    :s3 => { :region => 'us-east-1' }
})

您正在连接到错误的S3 DNS名称。“您不能从错误的区域访问存储桶。@spike Gronim那么可能使用的DNS是什么?也可以尝试使用,我发现这对我来说更容易。”。我暂时放弃了AWS/s3 gem。仅供参考,这里列出了所有区域和端点:这并不能解决问题。您在这里解释的是,该程序使用美国标准作为默认存储桶。
AWS::S3::Bucket.list[0]
AWS.config({
    :region => 'us-west-2',
    :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
    :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
    :s3 => { :region => 'us-east-1' }
})