环境
CentOS Linux release 7.7.1908 (Core)
Python 3.7.7
django 2.2.10
uWSGI 2.0.19.1
/www/mysite uwsgi www 权限 754
/www/mysite/static uwsgi www 权限 755
问题
- 在 Debug = True 时,通过 python manage.py runserver 运行服务,svg 图片可正常显示。
- 在 Debug = Flase 时,通过 python manage.py collectstatic 收集静态文件后,再通过 uWSGI 接管 Django 的静态文件后,css 与 js 文件可正常显示,png 文件可正常显示;而 svg 图片文件无法显示,显示损坏图标。
在网上搜索相关的都是 django + uwsgi + nginx 部署方式的解决方案,无法搜索到仅使用 django + uwsgi 的。
而一个小应用确实不想再加个 nginx ... 于是留下此文。
解决
步骤一
CentOS 7:
sudo yum install -y mailcap
UBuntu or Debian:
sudo apt-get install -y mime-support
步骤二
则修改 uwsgi.ini,追加内容:
# 强制 uwsgi 读取 mime.types 配置文件
mime-file = /etc/mime.types
步骤三
使用 uwsgi 停止并重新启动项目:
uwsgi --stop uwsgi.pid
uwsgi uwsgi.ini
浏览器:f12 -> disabled cached -> ctrl + f5 -> 查看 svg 静态文件是否被显示。
若静态文件 svg 还是未被显示,则修改 uwsgi.ini,追加内容后,等待1-2分钟,再重新执行"步骤三"。
步骤四
若静态文件 svg 还是未被显示,可尝试在启用"其他方案"的情况下执行"步骤三"。
其他方案
搜到的唯一方法,测试时,无效。
在使用解决方案时,此设置在 settings.py 中未注释。
在使用解决方案后,注释后,svg 图片可显示。
import mimetypes
mimetypes.add_type("image/svg+xml", ".svg", True)
mimetypes.add_type("image/svg+xml", ".svgz", True)
参考
github.com/unbit/uwsgi/issues/821 (在未解决问题时,由于网络问题导致没打开这个链接,导致从其他参考处,一步一步找到了相关信息,最后解决,整理时这个网页打开了...于是浪费了好多时间...可见网络的重要性 )
doc.codingdict.com/uwsgi/uwsgi-docs-zh.readthedocs.io/zh_CN/latest/StaticFiles.html
www.imooc.com/qadetail/277795
stackoverflow.com/questions/32653137/nginx-django-app-not-serving-svg-files
www.cnblogs.com/widgetbox/p/11934891.html