Skip to main content
 首页 » 编程设计

ruby-on-rails之访问我的 AWS S3 帐户的存储桶时出现问题

2024年11月24日27linjiqin

我试图在我的 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>> 

我有一个基于“新加坡地区”的存储桶,对于该端点,即服务器是:s3-ap-southeast-1.amazonaws.com 所以当我尝试使用此命令访问它时 -
AWS::S3::Service.buckets 

它正确获取了我帐户中的所有存储桶 -
=> [#<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=[]>] 

其中bucket1属于新加坡地区,其他2属于美国地区。所以,当我这样做时——
AWS::S3::Bucket.find("bucket1") 

它向我展示了这个错误:
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::DEFAULT_HOST.replace "s3-ap-southeast-1.amazonaws.com" 

您可以做的另一件事(尽管这不是一个很好的解决方案)是使用数组索引访问存储桶
AWS::S3::Bucket.list[0]