如何在Django settings中访问Heroku config variables解决部署密钥报错
问题原因
- 你当前的SECRET_KEY赋值逻辑存在语法错误:
env('KEY',default=env('SECRET_KEY'))执行时,会先尝试读取SECRET_KEY的值作为默认值参数,只要Heroku环境中没有该变量,还没轮到判断KEY是否存在就会直接抛出配置缺失错误 - Heroku的Config Vars会直接注入到应用运行的系统环境变量中,environ包默认支持直接读取系统环境变量,无需额外配置,只要变量名匹配即可
解决步骤
1. 配置Heroku环境变量
两种方式二选一即可:
- 本地使用Heroku CLI执行命令:
heroku config:set SECRET_KEY=你生成的生产环境安全密钥 - 登录Heroku后台,进入对应应用的「Settings」页面,找到「Config Vars」板块,手动添加键为
SECRET_KEY、值为你的生产密钥的配置项
你可以使用python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"生成符合要求的安全密钥
2. 修正Django配置代码
方案1(更推荐,统一变量名)
将本地.env文件中的密钥变量名也改为SECRET_KEY,直接简化配置代码:
import os import environ env = environ.Env() # 本地存在.env就读取,Heroku无.env会自动跳过,不会报错 environ.Env.read_env() SECRET_KEY = env('SECRET_KEY')
方案2(保留本地变量名KEY)
如果要保留本地.env中变量名为KEY的配置,修改赋值逻辑为:
import os import environ env = environ.Env() environ.Env.read_env() # 先尝试读本地的KEY,没有的话就读环境变量的SECRET_KEY SECRET_KEY = env('KEY', default=None) or env('SECRET_KEY')
注意事项
- 不需要关闭Heroku的collectstatic配置,只要环境变量配置正确,collectstatic步骤会自动正常执行
- 生产环境的SECRET_KEY不要和本地开发用的一致,避免安全风险
内容的提问来源于stack exchange,提问作者Atif Shafi
相关产品推荐
相关产品推荐

