drf-yasg 静态资源static404问题解决

问题:

drf-yasg是python环境下的SwaggerAPI包,django-rest-swagger已经废弃。

在开发环境下测试正常,在部署环境下测试出现问题,主要是ip/static/下文件get失败。情况如这个博客所示(我的程序已经调试正常,就不可以重现错误了)。

分析:

问题起因在于swagger的网页资源是和python包放置在一起。在服务器上部署时,找到不到静态资源位置的原因。

这里展示一下静态资源的位置 /static(这里用的是python虚拟环境):

drf-yasg 静态资源static404问题解决_第1张图片

备注:这个venv在pycharm中是虚拟环境才会在项目里可见。

drf-yasg 静态资源static404问题解决_第2张图片

解决:

将这个static文件夹复制到工程的根目录下,然后推送到远程服务器端,记录服务器下该文件的地址。

这里我使用pycharm默认的Deployment工具,因为static所在的venv被放在排除目录,所以要复制出来。

drf-yasg 静态资源static404问题解决_第3张图片

这样,也同时可以将django项目推送到服务器上。(备注,要会在服务器上开ssh,教程)

然后用uswgi进行代理(你不会说你不会用uwsgi吧?emm,其实我也不会,现学)

其核心是项目用一个uwsgi代理,外界访问uwsgi端口(我用的8087),uwsgi指向django的端口(我用的8088,平时调试就是这个端口),然后8087端口的静态资源指向我们复制过来的资源文件位置。

uwsgi.ini

[uwsgi]
# 使用nginx连接时使用
# socket = 127.0.0.1:3031

# 直接使用web服务器时使用
http = :8087

# 项目目录
chdir = /home/kaiyouhu/django/is_django/

# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file = InfoService/wsgi.py

# 项目开启进程数
processes = 1

#项目开启线程数
threads = 1

# 存在一个主进程
master = True

# 保存启动主进程pid的文件
pidfile = /home/kaiyouhu/django/is_django/uwsgi/uwsgi.pid

# 作为守护进程日志输出
deamonize = /home/kaiyouhu/django/is_django/uwsgi/uwsgi.log

# 定义静态文件
static-map=/static=/home/kaiyouhu/django/is_django/static
buffer-size  = 65535

# django默认端口
stats = :8088

端口可以不用加ip地址当前缀,如果都是在一台服务器上

然后

uwsgi --ini uwsgi.ini (uwsgi -d --ini uwsgi.ini  后台运行)

开启uwsgi和django,访问成功

drf-yasg 静态资源static404问题解决_第4张图片

 

你可能感兴趣的:(后台,前端,配置,django,uwsgi,drf-yasg,static,swagger)