如何在Django WSGI项目中正确配置静态文件?
Django生产环境(uWSGI)静态文件无法加载问题解决
核心问题分析
- 配置冲突:
settings.py中STATIC_ROOT与STATICFILES_DIRS指向同一目录,导致collectstatic无法正常收集静态文件; - 生产环境特性:Django的
runserver会自动处理静态文件服务,但uWSGI等生产服务器不会,必须手动收集静态文件并配置服务端映射。
分步解决方案
1. 修正settings.py静态配置
打开/home/alevt/health_check/client/app/settings.py,调整静态文件相关配置:
INSTALLED_APPS = [ # 其他应用... 'django.contrib.staticfiles', 'health_app', ] STATIC_URL = '/static/' # 注释或修改STATICFILES_DIRS,避免与STATIC_ROOT路径重复(无全局静态目录可直接删除该行) # STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ] # 指定独立的静态文件收集目录,与应用内静态目录区分开 STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
2. 收集静态文件
进入项目client目录,激活虚拟环境后执行收集命令:
cd /home/alevt/health_check/client source ../env/bin/activate python manage.py collectstatic
确认执行提示后,此命令会将所有应用(如health_app/static)中的静态文件统一复制到STATIC_ROOT指定的collected_static目录。
3. 配置uWSGI映射静态文件
编辑/home/alevt/health_check/client/my.ini,添加静态文件路由规则:
[uwsgi] http = 10.107.14.161:8000 module=app.wsgi:application chdir = /home/alevt/health_check/client/ wsgi-file = /home/alevt/health_check/client/app/wsgi.py virtualenv=/home/alevt/health_check/env single-interpreter = true enable-threads = true master = true # 添加静态文件映射,将前端请求的/static路径指向收集后的静态目录 static-map = /static=/home/alevt/health_check/client/collected_static
4. 重启uWSGI服务
systemctl restart myapp
额外检查:权限验证
确保uWSGI服务运行用户对collected_static目录拥有读取权限,若权限不足可执行:
chown -R <uwsgi运行用户>:<用户组> /home/alevt/health_check/client/collected_static chmod -R 755 /home/alevt/health_check/client/collected_static
内容的提问来源于stack exchange,提问作者Alevtina
相关产品推荐
相关产品推荐

