Django部署至Heroku后出现Internal Server Error问题求助
核心结论
不要将.env文件推送到Heroku服务器,也不要提交到代码仓库,.env属于本地开发用的敏感配置文件,生产环境使用Heroku自带的环境变量管理能力即可,同时你当前配置里还有其他会触发500错误的问题,统一修复步骤如下:
第一步:修复ALLOWED_HOSTS配置错误
你当前的ALLOWED_HOSTS填写不符合Django要求,该配置仅接受域名/IP,不能携带协议、端口、路径后缀,修改为如下内容:
ALLOWED_HOSTS = ['127.0.0.1', 'stripetestdjango.herokuapp.com', 'localhost']
第二步:在Heroku配置环境变量(替代.env文件作用)
有两种配置方式二选一即可:
- Heroku后台配置:打开你的Heroku应用管理页,点击「Settings」标签,找到「Config Vars」板块,点击「Reveal Config Vars」,手动逐条添加你本地.env文件里的所有键值对即可
- Heroku CLI批量配置:安装Heroku命令行工具并登录后,在本地项目根目录执行如下命令,可自动批量导入.env内的变量(注意提前删除.env里本地专属的配置如
DEBUG=True这类)
cat .env | grep -v ^# | xargs heroku config:set -a 替换为你的Heroku应用名
如果需要单独设置某一个变量,执行:
heroku config:set 变量名=变量值 -a 替换为你的Heroku应用名
第三步:其他可能导致500的配置修复
- 建议恢复whitenoise的静态文件存储配置,否则可能出现静态资源加载异常触发报错,修改为:
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
- 替换不严谨的DEBUG判断逻辑,不要用工作目录判断是否是生产环境,建议新增一个专属环境变量判断:
首先在Heroku的Config Vars里新增键为HEROKU_DEPLOY,值为1的变量,然后修改settings.py里的判断逻辑为:
if os.getenv('HEROKU_DEPLOY'): DEBUG = False
- 部署完成后手动执行一次数据库迁移,避免未建表导致的500错误:
heroku run python manage.py migrate -a 替换为你的Heroku应用名
- 如果还未定位到问题,可以临时将DEBUG改为True部署一次,查看具体报错信息,排查完成后立刻改回False即可。
内容的提问来源于stack exchange,提问作者user14653534
相关产品推荐
相关产品推荐

