部署Django项目到Heroku后出现找不到settings.py文件的报错
嘿,我之前也踩过这个坑!从你提供的报错日志来看,核心问题是Django在加载配置时找不到指定的settings模块——本质是DJANGO_SETTINGS_MODULE环境变量配置错误,或者项目路径没被Python正确识别。下面是一步步的排查和解决方法:
1. 先确认你的项目结构
从日志里的路径/app/django_structure/src/django_structure/wsgi.py来看,你的settings.py应该和wsgi.py在同一个目录下,也就是/app/django_structure/src/django_structure/里。对应的Python模块路径应该是django_structure.settings(只要src目录被加入Python路径,里面的django_structure就是可导入的模块)。
2. 配置Heroku环境变量
最稳妥的方式是通过Heroku环境变量指定settings模块:
- 打开终端,运行这个命令:
这个命令会在Heroku服务器上设置环境变量,明确告诉Django去哪里找你的配置文件。heroku config:set DJANGO_SETTINGS_MODULE=django_structure.settings
3. 检查Procfile的正确性
Procfile是Heroku启动应用的核心配置文件,要确保里面的gunicorn命令指向正确的wsgi模块,同时把src目录加入Python路径(如果你的settings在src下的话)。比如你的Procfile应该写成这样:
web: PYTHONPATH=src gunicorn django_structure.wsgi --log-file -
这里PYTHONPATH=src会让Python把src目录当成模块搜索路径,这样就能顺利找到django_structure.wsgi模块了。
4. 手动在wsgi.py里指定settings路径(应急方案)
如果环境变量设置后还是不行,可以直接在wsgi.py里硬编码配置路径(虽然不推荐长期这么用,但能快速验证问题):
import os # 替换成你正确的settings模块路径 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_structure.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
5. 验证本地环境是否正常
先在本地跑一下,确保DJANGO_SETTINGS_MODULE设置正确:
export DJANGO_SETTINGS_MODULE=django_structure.settings python manage.py runserver
如果本地能正常启动,那部署到Heroku时的问题大概率就是环境变量或Procfile的配置问题。
一般来说,按照上面的步骤调整后,这个找不到settings的报错就会消失啦!
内容的提问来源于stack exchange,提问作者Frank Gilmor

