Heroku运行Django自定义管理命令报SECRET_KEY未配置错误求助
问题根因
heroku ps:exec启动的交互式shell会话不会自动加载你在Heroku后台配置的应用环境变量,仅dyno启动时的主进程会继承这些变量,因此你的Web服务运行正常,但手动进入shell执行命令时无法读取到SECRET_KEY等配置。- 本地开发环境存在
.env文件存储配置,environ.Env.read_env()可以正常读取到对应参数,因此本地运行无报错。
解决方案
方案1(官方推荐)
使用heroku run执行管理命令,该方式会自动加载所有应用配置的环境变量:
heroku run python manage.py test_command -a library-backend
方案2(兼容ps:exec执行场景)
如果需要进入dyno的交互式shell执行命令,可以在进入shell后先手动加载环境变量再运行命令:
# 进入shell后先执行该命令加载配置 export $(cat /app/.profile.d/env | xargs) # 再执行自定义命令 python manage.py test_command
方案3(优化配置兼容性)
修改settings.py的环境变量加载逻辑,增加无.env文件时的兼容处理,避免后续同类问题:
import environ import os env = environ.Env(DEBUG=(bool, False)) # 仅本地开发存在.env文件时才读取,生产环境直接读取系统环境变量 env_file = os.path.join(os.path.dirname(__file__), '.env') if os.path.isfile(env_file): environ.Env.read_env(env_file) DEBUG = env('DEBUG') SECRET_KEY = env('SECRET_KEY') DATABASE_URL = env('DATABASE_URL')
内容的提问来源于stack exchange,提问作者Andrew Einhorn
相关产品推荐
相关产品推荐

