在Ubuntu EC2实例中编辑Git克隆的Django项目遇故障如何解决?
排查Ubuntu EC2上Django项目本地正常、服务器故障的问题
这种“本地跑的好好的,一到服务器就崩”的场景我碰到过好多次,别慌,咱们一步步来定位问题:
1. 先确认服务器上的代码和本地完全同步
很多时候问题出在代码没传全:
- 先在EC2上进入项目目录,用
git status看看有没有未跟踪的文件,或者git log确认当前提交的版本是不是本地最新的那个。如果是手动复制文件的,用ls检查新的template、view文件是不是都在对应的目录里,比如新模板有没有放到templates/下。 - 可以用
diff命令对比本地和服务器的文件差异(如果能通过SSH连服务器的话):diff -r /本地项目路径/ ubuntu@EC2_IP:/服务器项目路径/,看看有没有文件缺失或内容不一致。
2. 查看Django的错误日志(最关键!)
服务器上的Django不会像本地那样直接在浏览器显示详细错误(除非开了DEBUG=True),所以一定要看日志:
- 如果是用
python manage.py runserver启动的,直接看终端里的输出,里面会有具体的错误信息(比如TemplateDoesNotExist、URL配置错误、Python语法报错)。 - 如果用了Gunicorn/uWSGI这类服务器,找到对应的日志文件(比如Gunicorn日志可能在
/var/log/gunicorn/,或者你启动时指定的--access-logfile路径),搜索关键词比如ERROR、Traceback,定位具体报错点。
3. 检查Python环境依赖是否一致
本地和服务器的包版本差异是常见坑:
- 本地跑
pip freeze > requirements.txt,把依赖列表传到服务器,然后在服务器的虚拟环境里跑pip install -r requirements.txt,确保所有包版本和本地一致。 - 对比本地和服务器的Python版本:
python --version,比如本地用3.10,服务器是3.8,有些新语法(比如match语句)会报错。 - 确认服务器上激活了正确的虚拟环境:比如本地用
venv,服务器上要先跑source venv/bin/activate再启动项目。
4. 检查Django配置文件(settings.py)
配置差异也会导致问题:
- 看
DEBUG和ALLOWED_HOSTS:如果服务器上DEBUG=False,要确保ALLOWED_HOSTS里加了EC2的公网IP或域名,否则会返回400错误。 - 验证模板和静态文件路径:在服务器上启动Django shell,检查路径是否正确:
确保python manage.py shell from django.conf import settings print(settings.BASE_DIR) print(settings.TEMPLATES[0]['DIRS'])BASE_DIR指向的是项目根目录,模板目录路径正确。
5. 清理缓存与重启服务
Django可能缓存了旧的配置:
- 清理Django缓存:
python manage.py clearcache - 删除项目里的
__pycache__目录:find . -name "__pycache__" -type d -exec rm -r {} + - 完全重启Django服务,不要只是刷新页面,比如停止
runserver后重新启动。
6. 检查文件权限
新上传的文件可能权限不足,导致Django无法读取:
- 查看文件所有者:
ls -l,确保运行Django的用户(比如EC2的ubuntu用户)有读写权限。 - 如果权限不对,修改所有者:
chown -R ubuntu:ubuntu /项目目录/,或者调整权限:chmod -R 755 /项目目录/
7. 逐步回退修改定位问题
如果以上都没找到原因,就把你新增的内容一步步回退:
- 先恢复原来的
urls.py,重启服务测试,看是不是URL配置的问题; - 再恢复原来的view函数,测试;
- 最后恢复原来的模板,每次只改一部分,直到找到导致故障的具体代码块。
内容的提问来源于stack exchange,提问作者AI Web
相关产品推荐
相关产品推荐

