我正在编写一个Ruby on Rails Web应用程序,其功能需要将图像上传到AWS。在本地运行应用程序时,我能够上传到AWS就好了。但是当我部署到Heroku时遇到了问题。
当我尝试上传图片时出现错误。我的日志显示:
Aws::S3::Errors::AccessDenied (Access Denied)
config / environments / production.rb:
config.paperclip_defaults = {
:storage => :s3,
:s3_region => ENV.fetch('AWS_REGION'),
:bucket => ENV.fetch('AWS_BUCKET'),
:s3_credentials => {:access_key_id => ENV.fetch('AWS_ACCESS_KEY_ID'),
:secret_access_key => ENV.fetch('AWS_SECRET_ACCESS_KEY')}
}
我做过的其他事情:
创建IAM用户
使用heroku config:set foo=bar
修改IAM用户的权限以包含AmazonS3FullAccess
添加Bucket政策
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowFileUpload",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[**id**]:user/user-heroku"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::clothes-swapper/*",
"arn:aws:s3:::clothes-swapper"
]
}
]
}
答案 0 :(得分:0)
答案 1 :(得分:0)
原来这是一个简单的问题。所有凭据都应该在:s3_credentials
哈希
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV.fetch('AWS_BUCKET'),
:access_key_id => ENV.fetch('AWS_ACCESS_KEY_ID'),
:secret_access_key => ENV.fetch('AWS_SECRET_ACCESS_KEY'),
:s3_region => ENV.fetch('AWS_REGION'),
}
}
我还删除并在亚马逊上创建了新的访问密钥。这也可以解决这个问题。