Django生产环境DEBUG=False设置不生效问题求助
问题排查与解决步骤
1. 确保正确加载生产环境配置
你看到调试错误的核心原因大概率是没有明确指定生产环境配置文件,导致Django默认加载了settings/base.py(该文件中DEBUG=True)。
- 运行开发服务器时指定生产配置:
python manage.py runserver --settings=AssaySite.settings.production - 生产部署时(如使用Gunicorn)也要明确指定配置:
gunicorn --bind 0.0.0.0:8000 AssaySite.wsgi:application --settings=AssaySite.settings.production - 或通过环境变量让Django自动加载生产配置:
export DJANGO_SETTINGS_MODULE=AssaySite.settings.production
2. 清除Python字节码缓存
__pycache__目录中的编译文件可能保留了旧配置,导致修改不生效。彻底删除所有缓存目录:
find . -name "__pycache__" -type d -exec rm -rf {} +
3. 检查settings/__init__.py内容
你的settings目录下存在__init__.py,如果该文件中有导入base.py或设置DEBUG的代码,会覆盖production.py的配置。打开该文件,确保它是空的,或者不要在其中硬编码配置(推荐通过命令行/环境变量指定配置)。
4. 验证当前生效的配置
运行以下命令确认配置是否正确加载:
python manage.py shell --settings=AssaySite.settings.production
在shell中输入:
from django.conf import settings print(settings.DEBUG) print(settings.ALLOWED_HOSTS)
若输出False和你的生产域名列表,说明配置加载正确;若仍为True,需排查是否有其他代码覆盖了DEBUG设置。
额外注意事项
- 生产环境禁止使用
runserver,它是开发专用服务器,性能和安全性均不满足生产要求,建议改用Gunicorn/uWSGI配合Nginx部署。 - 可以修改
base.py,将默认DEBUG设为False,仅在local.py中设置DEBUG=True,避免忘记指定配置时暴露调试信息。 - 若你的服务器尚未配置HTTPS,需暂时将
base.py中的SECURE_SSL_REDIRECT设为False,否则会导致重定向循环。
内容的提问来源于stack exchange,提问作者Vikram Gajjala
相关产品推荐
相关产品推荐

