You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails7 Active Storage生产环境(Heroku+S3)图片上传失败排查

排查Heroku + S3 + Active Storage图片上传500错误

1. 修正S3 CORS配置

Active Storage直接上传需要特定的CORS规则,确保你的S3桶CORS配置如下(替换为实际的Heroku应用域名):

<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>https://your-heroku-app.herokuapp.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <ExposeHeader>Content-Length</ExposeHeader>
  </CORSRule>
</CORSConfiguration>
> 注意:CORS配置保存后需要5-10分钟才会生效,不要立即测试。

## 2. 核对Heroku环境变量
确认Heroku配置中已正确设置所有AWS参数,执行`heroku config`命令检查:
- `AWS_ACCESS_KEY_ID`:AWS访问密钥ID
- `AWS_SECRET_ACCESS_KEY`:AWS秘密访问密钥
- `AWS_REGION`:S3桶所在区域(如`us-west-2`)
- `S3_BUCKET_NAME`:目标S3桶名称

若有缺失或错误,用`heroku config:set KEY=VALUE`命令补充或修正。

## 3. 查看服务器日志定位具体错误
执行`heroku logs --tail`命令,触发一次图片上传操作后,查看日志中500错误的详细栈信息:
- 若出现`Aws::S3::Errors::PermissionDenied`:给对应的IAM用户添加以下权限政策(替换为你的桶名):
```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListBucket"],
      "Resource": ["arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*"]
    }
  ]
}
  • 若出现Vips::Error:确认项目根目录的Aptfile配置正确,内容应为:
libvips42
libvips-dev

重新部署Heroku应用后,在控制台验证vips可用性:

heroku run rails console
> require 'vips' # 无报错即表示安装成功

4. 确认Active Storage配置与迁移状态

  • 检查config/environments/production.rb中是否包含:
config.active_storage.service = :amazon
  • 检查config/storage.yml的:amazon配置是否正确引用环境变量:
amazon:
  service: S3
  access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
  secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
  region: <%= ENV['AWS_REGION'] %>
  bucket: <%= ENV['S3_BUCKET_NAME'] %>
  • 执行heroku run rails db:migrate,确保active_storage_blobs和active_storage_attachments表已在生产环境创建。

5. 检查S3桶附加权限

若S3桶启用了服务器端加密(KMS),需确保IAM用户拥有kms:GenerateDataKey和kms:Decrypt权限;同时确认桶的访问控制列表(ACL)未设置过度限制,允许IAM用户进行对象操作。

内容的提问来源于stack exchange,提问作者Jack Gio Packham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:25:19