使用uwsgi和nginx做伺服器和django框架,為什麼每次修改代碼都需要重啟uwsgi呢?
我的uwsgi配置如下
[uwsgi]
socket = 127.0.0.1:5000
chmod-socket = 777
limit-as = 256
processes = 2
max-request = 2000
memory-report = true
enable-threads = true
pythonpath = /home/user/webtest/webpython/mysite
chdir = /home/user/webtest/webpython/mysite
wsgi-file = /home/user/webtest/webpython/mysite/main.py
我的nginx配置文件如下
server {
listen 80;
server_name www.test.com;location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
}
不知道為什麼每次修改Django裡面的代碼都需要重啟uwsgi。新手,希望能的到詳細指點。謝謝
uwsgi本身就是這樣的機制,主要還是為了效率。它有一個reload的參數,可以指定某個文件,當文件發生變化時,會自動重啟。你也可以考慮用這個。
還有一種方法配置「py-autoreload = 1」,每次修改代碼會自動reload,不再需要手動重啟。
uwsgi --reload uwsgi.pid
其中uwsgi.pid是進程的pid文件平時不用 uwsgi (我是 gunicorn 黨),不過 google 到了這個 uWSGI + django autoreload module
重啟 uwsgi 進程顯然是為了讓新代碼生效, 如果你僅是在開發環境調試程序,直接使用django 的 manager.py runserver 可以自動重載修改的py文件, 生產環境也不會存在你在上面不停修改py文件而需要不停重載uwsgi的需求吧.
另外可以參考 uwsgi 的控制信號 Managing the uWSGI server
如果要重載 uwsgi 的程序, 只需要發送一個 SIGHUP 的信號給 uwsgi 的主進程即可.我想問了解一下你的靜態文件怎樣設置,載入出來的
寫了一個reload uWSGI的腳本,WUJISHANXIA/leetcode 可以方便重啟uwsgi服務
--touch-reload reload uWSGI if the specified file is modified/touched
推薦閱讀:
※為什麼感覺現在搜索到的東西,越來越糟呢?
※varnish / squid / nginx cache 有什麼不同?
※微軟的 Web 伺服器為何能屹立不倒?
※Linux多進程模型比多線程更容易實現熱部署嗎?
※Nginx 多進程模型是如何實現高並發的?