記一次django項目的線上部署維護問題,django+nginx
關於nginx反向代理服務器的介紹這里有一篇博客介紹的比較好:nginx的相關介紹
以及當一次客戶端請求發出后,uwsig以及uWSGI,Nginx之間的大致流程:uWSGI、WSGI和uwsgi
一、問題描述
在將django項目部署到阿里雲(nginx作為web服務器)上之后,使用寶塔控制面板修改項目源碼,或者使用直接在終端修改,修改之后重啟uwsgi和nginx無效。
二、問題分析
1、本地環境
在本地環境的時候,是使用Django為提供的輕量級的專門為開發用的Web服務器。默認情況下,服務器運行在IP地址127.0.0.1的8000端口上。
python manage.py runserver
如果要自定義服務器端口和地址,可以顯式地傳遞一個IP地址和端口號給它。
python manage.py runserver 127.0.0.1:8080
注:manage.py是每個Django項目中自動生成的一個用於管理項目的腳本文件,需要通過python命令執行。manage.py接受的是Django提供的內置命令。
常用的內置命令有:
- runserver:開啟本地web服務器
- makemigrations:對models.py的所有改動,並且將這個改動遷移到migrations(默認全局)
- migrate:migrations里面新改動的遷移文件更新數據庫(默認全局)
- startapp:創建app
- startproject:創建項目
- createsuperuser:創建超級用戶
在本地的時候,直接修改,然后重啟runserver就可以效果,比較方便,但是到服務器上就出問題了。
2、問題所在
- 一方面:如果直接在服務器中修改源代碼,由於Python本身對縮進的嚴格要求,會造成異常出錯。
- 另一方面:在本地時候,使用 python manage.py runserver 來運行服務器。這只適用測試環境中使用。不用考慮uwsgi服務器,以及wsgi接口之間的問題,但是到真正的生產環境下,真正工作的是他們。
也就是說每次修改源代碼,就需要重啟服務器。
三、問題解決
在修改源碼上傳服務器之后,進入服務器項目目錄,查看uwsgi進程
ps -ef|grep uwsgi
然后殺死所有進程
killall -9 uwsgi
再重新啟動uwsgi
uwsgi -x projectname(項目名).xml
然后再寶塔或者直接命令重啟Nginx
/usr/local/nginx/sbin/nginx -s reload
問題解決,項目所做相關修改正常顯示。