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

Django配置AWS S3静态文件本地正常Heroku/Gunicorn生产环境失效问题

问题根因

你遇到的问题核心是部署环境中未正确配置AWS相关的环境变量,os.environ.get()方法在读取不存在的环境变量时会默认返回None,因此拼接AWS_S3_CUSTOM_DOMAIN时就会把存储桶名替换为none。


解决方案

1. Heroku平台环境变量配置

在本地终端执行以下命令为Heroku应用配置对应环境变量,替换尖括号内的实际值:

heroku config:set AWS_ACCESS_KEY_ID=<你的AWS访问密钥ID>
heroku config:set AWS_SECRET_ACCESS_KEY=<你的AWS访问密钥>
heroku config:set AWS_STORAGE_BUCKET_NAME=<你的S3存储桶名称>

配置完成后可以执行heroku config确认所有变量都已正确设置,之后重新部署应用即可生效。

2. 本地Gunicorn运行环境配置

本地直接启动Gunicorn时不会自动加载项目目录下的.env文件,有两种解决方式:

  • 启动前先临时导入环境变量:
    export AWS_ACCESS_KEY_ID=<你的AWS访问密钥ID>
    export AWS_SECRET_ACCESS_KEY=<你的AWS访问密钥>
    export AWS_STORAGE_BUCKET_NAME=<你的S3存储桶名称>
    gunicorn <你的项目名>.wsgi
    
  • 安装python-dotenv自动加载环境变量:
    先安装依赖:
    pip install python-dotenv
    
    之后在settings.py的最开头添加代码加载本地环境变量:
    from pathlib import Path
    import os
    import django_heroku
    from dotenv import load_dotenv # 新增
    
    # 加载项目根目录下的.env文件,路径根据你的.env实际存放位置调整
    load_dotenv(Path(__file__).resolve().parent.parent.parent / '.env')
    

3. 增加环境变量校验(可选建议)

可以在配置AWS参数的代码段后增加校验逻辑,避免环境变量缺失时难以定位问题:

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

# 新增校验逻辑
if not all([AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_STORAGE_BUCKET_NAME]):
    raise EnvironmentError("AWS S3相关环境变量未配置,请检查运行环境变量设置")

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:15:04