问题:
使用 uwsgi+nginx+django 部署到服务器后出现 css 样式丢失,类似下图效果:
原因:
nginx除了提供反向代理,负载均衡以外,还提供了静(html, css, js)动(视图,模板需要进行解析执行的,或者操作数据库的)分离的功能。
- 原本django项目中的静态资源存放在static文件夹中,其中包含我们自己的html,css,js等。
- admin模块拥有的静态资源没有在static文件夹下,nginx中配置的会从static目录下寻找静态资源。
nginx为什么只从配置路径中寻找静态资源:
因为处理静态和处理动态资源所消耗的性能和是不一样的。原本静态和动态都是在django项目中,而且django项目运行在uwsgi中,所以动静态都是由uwsgi处理。有了nginx之后,静态资源我们交给nginx处理,nginx处理静态资源的性能极高。
解决方法:
- 项目目录下setting.py中添加如下代码:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static')
- 在该目录下运行如下命令:
python manage.py collectstatic
该命令用于收集当前项目所依赖的所有的静态资源,然后存放在某一个目录下,默认存放在setting中配置的STATIC_ROOT 的目录下
- 在nginx.conf(/etc/nginx/)中配置如下代码:
location /static {
# 指定静态文件存放的目录
alias /src/www/novel/static/;
}
- 运行以下命令停止uwsgi服务:
sudo pkill -f uwsgi -9
- 进入uwsgi.ini目录下执行以下命令,启动uwsgi服务:
uwsgi --ini uwsgi.ini
- 然后刷新admin的页面就可以了!