rails aws-s3删除文件抛出AWS :: S3 :: PermanentRedirect错误 - EU存储桶问题?

时间:2011-07-16 12:22:44

标签: ruby-on-rails-3 amazon-s3

我正在heroku上构建一个rails3应用程序,我正在使用aws-s3 gem来处理存储在Amazon S3 eu存储桶中的文件。

当我尝试执行 AWS :: S3 :: S3Object.delete文件名,'mybucketname'命令时,出现以下错误:

  

AWS :: S3 :: PermanentRedirect(您尝试访问的存储桶)   必须使用指定的端点进行寻址。请发送所有未来   请求此端点。):

我已将以下内容添加到 application.rb 文件中:

 AWS::S3::Base.establish_connection!(  
   :access_key_id     => "myAccessKey",  
   :secret_access_key => "mySecretAccessKey" 
 )

以及我的控制器的以下代码:

  
    def def         song = tape.songs.find(params [:id])

AWS::S3::S3Object.delete song.filename, 'mybucket'

song.destroy


respond_to do |format|  
    format.js   { render :nothing => true } 
  end     end
  

我找到了一个建议的解决方案,可以将 AWS_CALLING_FORMAT:SUBDOMAIN 添加到我的 amazon_s3.yml 文件中,据说,aws-s3应该处理与我们不同的eu存储桶。 但是,这不起作用,收到同样的错误。

您能提供任何帮助吗? 非常感谢你的帮助。

3 个答案:

答案 0 :(得分:3)

问题是你需要在config中输入SUBDOMAIN作为大写字符串,试试这个

答案 1 :(得分:1)

您可以在连接初始化点指定自定义端点:

    AWS::S3::Base.establish_connection!(
      :access_key_id     => 'myAccessKey',
      :secret_access_key => 'mySecretAccessKey',
      :server            => 's3-website-us-west-1.amazonaws.com'
    )

您可以通过AWS控制台找到实际的终端:

enter image description here

有效选项的完整列表 - 此处https://github.com/marcel/aws-s3/blob/master/lib/aws/s3/connection.rb#L252

VALID_OPTIONS = [:access_key_id, :secret_access_key, :server, :port, :use_ssl, :persistent, :proxy].freeze

答案 2 :(得分:0)

我的解决方案是在初始化时将常量设置为实际服务链接。 在config / initializers / aws_s3.rb

  AWS::S3::DEFAULT_HOST = "s3-ap-northeast-1.amazonaws.com"
  AWS::S3::Base.establish_connection!(
      :access_key_id     => 'access_key_id',
      :secret_access_key => 'secret_access_key'
  )