环境

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

最后修改:2021 年 02 月 23 日 03 : 20 PM
如果觉得文章帮助了您,您可以随意赞赏。