[英]uWSGI Emperor Mode Not Working Outside of Virtualenv
我正在嘗試通過使用Emperor模式和器皿通過uWSGI運行Django應用程序,器皿正確指向ini文件,並且ini文件將home
定義為/ home / user /.virtualenvs/myvirtualenv,但是這不起作用(日志顯示該連接過早關閉)。 但是,如果我在virtualenv中運行相同的命令,那么它們都可以正常運行,因此我的猜測是uWSGI忽略了home
選項。 但是,這沒有用,因為我需要使用各自的virtualenv運行幾個不同的應用程序(因此,我需要使用Emperor模式)。
這是提到的船只ini:
# mysite_uwsgi.ini file
[uwsgi]
#virtualenv = /home/ariel/.virtualenvs/django-ag-panel/
# Django-related settings
# the base directory (full path)
chdir = /home/ariel/Desarrollo/Django/django-ag-panel/ag_panel
# Django's wsgi file
module = ag_panel.wsgi
# the virtualenv (full path)
home = /home/ariel/.virtualenvs/django-ag-panel/
這是我用來運行皇帝的命令(我使用的是與托管該應用程序的用戶相同的用戶,以避免出現更多文件權限問題):
uwsgi --emperor /etc/uwsgi.d/vassals
我的附庸國實際上在那里:
[ariel@e11 ~]$ ls -l /etc/uwsgi.d/vassals/
total 0
lrwxrwxrwx. 1 root root 73 feb 7 21:37 ag_panel_uwsgi.ini -> /home/ariel/Desarrollo/Django/django-ag-panel/ag_panel/ag_panel_uwsgi.ini
就像我說的,如果我在virtualenv中運行uWSGI命令,那么一切都可以正常工作:
workon django-ag-panel
uwsgi --emperor /etc/uwsgi.d/vassals
我究竟做錯了什么?
我遇到“過早關閉的連接”問題,因為我試圖通過NGINX和uWSGI與該應用進行通信。 真正的問題是船只未正確加載,並且通過手動運行(在virtualenv之外),我發現問題是'site' module not found
錯誤,這是由於全局安裝(通過yum進行安裝)時,發行商提供的uWSGI軟件包沒有內置python支持,因此實例無法正確啟動。 這將我們帶到以下...
我認為可能很多人通過遵循以下教程來嘗試在Linux上配置uWSGI + NGINX:
可能還有其他一些; 他們沒有指出的是,您從pip
命令和軟件包分發程序獲得的uWSGI版本有所不同,正如此uwsgi快速入門指南指出的那樣,分發程序可以以“模塊化”方式編譯uWSGI:
使用發行版軟件包測試此快速入門時,您可能需要考慮的一件事是,您的發行版很可能已經以模塊化方式構建了uWSGI(每個功能都是必須加載的不同插件)。 要完成此快速入門,您必須在第一個示例系列的前面加上--plugin python,http,並在刪除HTTP路由器后加上--plugin python ...
pip附帶的軟件包直接提供了python支持(至少就我而言,在Fedora Linux 23上)。 而且,由於軟件包管理器和pip是獨立的,因此您可以同時安裝分發服務器版本和pip版本,如果已經存在問題,請想象一下您的virtualenv中的軟件包的第三個本地版本。 我遵循的步驟如下:
如果您選擇發行商提供的模塊化版本:
確保還安裝了uwsgi-plugin-python.x86_64
和uwsgi-plugin-python.x86_64
uwsgi-plugin-python3.x86_64
軟件包,以及以下軟件包: uwsgi-router-http.x86_64
, uwsgi-router-http.x86_64
uwsgi-plugin-common.x86_64
以及其他可能需要的uwsgi-plugin-common.x86_64
。 然后,使用--plugin
選項運行--plugin
實例以啟用python或python3支持,然后再使用其他任何選項。 'site' module not found
錯誤現在應該消失了。 如果您使用配置文件或vassals運行,也可以在ini文件中使用該選項(例如plugin = python3
)。
在所有情況下,請確保您正在呼叫哪個版本,並且應該沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.