Django+Nginx+uWSGI部署后Admin编辑页面500错误排查求助
咱们一步步来拆解这个问题——毕竟DEBUG=False的时候,Django不会直接抛出详细错误信息,只能从日志、配置和模型细节入手定位问题。
第一步:先获取详细的错误日志(最关键!)
目前你的uwsgi.log只记录了请求返回500,但没有错误栈细节,这很难定位根源。你可以通过配置Django的日志系统来捕获详细错误:
- 在项目的
settings.py中添加日志配置:
import os LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'error_file': { 'level': 'ERROR', 'class': 'logging.FileHandler', 'filename': os.path.join(BASE_DIR, 'django_errors.log'), }, }, 'loggers': { 'django': { 'handlers': ['error_file'], 'level': 'ERROR', 'propagate': True, }, 'django.request': { 'handlers': ['error_file'], 'level': 'ERROR', 'propagate': False, }, }, }
- 保存后重启uWSGI服务,然后再次尝试访问
/admin/ssccapp/huodong/add/或编辑页面触发错误,打开生成的django_errors.log就能看到完整的错误栈信息了——这是最快找到问题的方法。
如果不想改配置,仅限测试环境,可以临时把settings.py里的DEBUG=True,并把ALLOWED_HOSTS添加你的服务器IP(比如ALLOWED_HOSTS = ['127.0.0.1', '你的公网IP']),这样访问admin时就能直接看到详细错误。
第二步:排查媒体文件(Media)的配置与权限
你的HuoDong模型里有ImageField和UEditorField,这两个都涉及文件上传/访问,而DEBUG=False时Django不会处理媒体文件请求,必须由Nginx接管,同时要保证目录权限正确:
1. 检查Django的Media配置
确认settings.py里的MEDIA_ROOT和MEDIA_URL配置正确:
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images') # 对应你ImageField的upload_to路径 MEDIA_URL = '/media/'
2. 配置Nginx转发媒体请求
在你的Nginx站点配置中添加媒体文件的location规则:
server { # 其他现有配置... # 处理媒体文件请求 location /media/ { alias /path/to/your/django/project/static/images/; # 注意替换成你实际的项目路径,末尾斜杠要加 expires 30d; } }
配置完成后重启Nginx:sudo systemctl restart nginx
3. 确认目录权限
uWSGI运行的用户(通常是www-data)需要对static/images目录有读写权限,否则上传文件时会报错:
# 替换成你的项目路径 sudo chown -R www-data:www-data /path/to/your/django/project/static/images sudo chmod -R 755 /path/to/your/django/project/static/images
第三步:检查UEditorField的配置问题
UEditor作为第三方富文本编辑器,部署时容易出现路径配置错误:
- 你模型里的
UEditorField配置了imagePath="static/images/%%Y/%%m/",如果MEDIA_ROOT已经是static/images,这个路径会变成static/images/static/images/YYYY/MM/,导致路径不存在无法写入。建议改成相对路径:imagePath="images/%%Y/%%m/" - 确认你已经执行过
python manage.py collectstatic,把UEditor的静态文件收集到STATIC_ROOT目录,否则admin页面加载UEditor资源时会出错。
第四步:验证默认图片的存在
你的ImageField设置了default = 'normal.jpg',要确认这个文件确实存在于static/images/目录下,并且Nginx能正常访问——如果文件缺失,加载模型表单时可能引发500错误。
先按上面的步骤排查,尤其是先拿到详细错误日志,几乎能直接定位问题根源。
内容的提问来源于stack exchange,提问作者Colin Knight

