Django部署Heroku时将SECRET_KEY写入.env启动报SECRET_KEY为空错误
报错原因
- Heroku云端配置和本地运行环境隔离:
heroku config:get SECRET_KEY获取的是你部署到Heroku云端服务的环境变量,heroku local启动本地服务时只会读取项目根目录下的本地.env文件内容,不会自动同步云端的配置项,所以云端配置了SECRET_KEY不代表本地环境能获取到。 - 本地
.env文件配置异常:要么未在本地.env中添加SECRET_KEY配置项,要么配置格式不符合要求(比如存在多余空格、引号配对错误、键名拼写错误等)。 - Django配置读取逻辑错误:
settings.py中没有正确编写环境变量读取逻辑,比如未安装依赖包、加载.env的代码缺失、读取环境变量的键名写错等,导致最终获取到的SECRET_KEY为空。
解决方案
- 配置本地.env文件
在项目根目录下(与manage.py、Procfile同级)找到.env文件,新增一行配置:
SECRET_KEY=你的SECRET_KEY实际值
可以直接执行heroku config:get SECRET_KEY获取云端的配置值,复制过来填写即可,注意不要加多余的前后空格,值包含特殊字符时才需要用引号包裹。
- 修正settings.py的读取逻辑
首先安装环境变量读取依赖:
pip install python-dotenv pip freeze > requirements.txt
然后在settings.py文件的最开头添加加载逻辑:
import os from dotenv import load_dotenv # 加载本地.env文件配置 load_dotenv() # 读取SECRET_KEY,开发环境可加兜底默认值,生产环境必须删除默认值强制从环境变量读取 SECRET_KEY = os.getenv('SECRET_KEY', '本地开发临时密钥仅用于测试')
- 验证生效
配置完成后重新执行heroku local启动服务即可,若仍报错可在settings.py中临时添加打印语句print(os.getenv('SECRET_KEY')),启动后查看输出即可快速定位是读取逻辑问题还是.env配置问题。
内容的提问来源于stack exchange,提问作者Arundeep Chohan
相关产品推荐
相关产品推荐

