RoR AWS-SDK访问欧洲地区的存储桶时出错

时间:2014-10-21 20:27:09

标签: ruby-on-rails amazon-s3 nameerror bucket aws-sdk

我正在使用最新的aws-sdk for Ruby。我的rake文件包含以下连接S3存储桶的行:

require 'aws-sdk'
...
AWS.config(
  :access_key_id => 'xxxxx', 
  :secret_access_key => 'xxxxx'
)
s3 = AWS::S3.new
object = s3.buckets['bucket_in_ireland'].objects['data.csv']

访问区域美国中的AWS S3存储桶时效果非常好。但是在访问区域 Ireland 中的AWS S3存储桶时出现以下错误:

AWS::S3::Errorrs::PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.

从Google我可以找到两个解决方案:

  1. AWS::S3::DEFAULT_HOST.replace "s3-eu-west-1.amazonaws.com"放在 environment.rb
  2. 的底部
  3. 回形针默认设置
  4. 设置:s3_host_name => 's3-eu-west-1.amazonaws.com'

    当我将(1)中提到的行放在 environment.rb 的底部时,错误消息更改为以下内容:

    NameError: uninitialized constant AWS::S3::DEFAULT_HOST
    

    然后我尝试通过更新 production.rb 中的以下代码来尝试(2)但是没有帮助。

    config.paperclip_defaults = {
      :storage => :s3,
      :s3_credentials => {
        :bucket => ENV['S3_BUCKET_NAME'],
        :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
        :s3_host_name => 's3-eu-west-1.amazonaws.com'
      }
    }
    

    注意:还尝试应用此修补程序[https://github.com/aws/aws-sdk-ruby/issues/510]但在 environment.rb 中进行修改后没有任何改变,但没有任何效果。

    任何帮助请...

1 个答案:

答案 0 :(得分:0)

s3_endpoint 设置为AWS配置解决了我的问题。

  AWS.config(
    :access_key_id => 'xxxx', 
    :secret_access_key => 'xxxx',
    :s3_endpoint => 's3-eu-west-1.amazonaws.com'
  )