drf-yasg 靜態資源static404問題解決

問題:

drf-yasg是python環境下的SwaggerAPI包,django-rest-swagger已經廢棄。

在開發環境下測試正常,在部署環境下測試出現問題,主要是ip/static/下文件get失敗。情況如這個博客所示(我的程序已經調試正常,就不可以重現錯誤了)。

分析:

問題起因在於swagger的網頁資源是和python包放置在一起。在服務器上部署時,找到不到靜態資源位置的原因。

這裏展示一下靜態資源的位置 /static(這裏用的是python虛擬環境):

備註:這個venv在pycharm中是虛擬環境纔會在項目裏可見。

解決:

將這個static文件夾複製到工程的根目錄下,然後推送到遠程服務器端,記錄服務器下該文件的地址。

這裏我使用pycharm默認的Deployment工具,因爲static所在的venv被放在排除目錄,所以要複製出來。

這樣,也同時可以將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,訪問成功

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章