我正在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存储桶。 但是,这不起作用,收到同样的错误。
您能提供任何帮助吗? 非常感谢你的帮助。
答案 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控制台找到实际的终端:
有效选项的完整列表 - 此处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'
)