簡體   English   中英

uWSGI Emperor模式無法在Virtualenv外部運行

[英]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:

  1. http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html
  2. https://www.digitalocean.com/community/tutorials/how-to-deploy-python-wsgi-applications-using-uwsgi-web-server-with-nginx
  3. https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-14-04

可能還有其他一些; 他們沒有指出的是,您從pip命令和軟件包分發程序獲得的uWSGI版本有所不同,正如此uwsgi快速入門指南指出的那樣,分發程序可以以“模塊化”方式編譯uWSGI:

使用發行版軟件包測試此快速入門時,您可能需要考慮的一件事是,您的發行版很可能已經以模塊化方式構建了uWSGI(每個功能都是必須加載的不同插件)。 要完成此快速入門,您必須在第一個示例系列的前面加上--plugin python,http,並在刪除HTTP路由器后加上--plugin python ...

pip附帶的軟件包直接提供了python支持(至少就我而言,在Fedora Linux 23上)。 而且,由於軟件包管理器和pip是獨立的,因此您可以同時安裝分發服務器版本和pip版本,如果已經存在問題,請想象一下您的virtualenv中的軟件包的第三個本地版本。 我遵循的步驟如下:

  1. 刪除系統中已安裝的所有uwsgi版本(或至少嘗試從pip或發行商提供的軟件包中清理執行路徑)
  2. 僅安裝所需版本的軟件包(或僅保留一個版本,以防您在上一步中未刪除所有內容)。
  3. 如果您選擇發行商提供的模塊化版本:

    確保還安裝了uwsgi-plugin-python.x86_64uwsgi-plugin-python.x86_64 uwsgi-plugin-python3.x86_64軟件包,以及以下軟件包: uwsgi-router-http.x86_64uwsgi-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 )。

  4. 如果您選擇的是pip版本:請像平常一樣使用它。

在所有情況下,請確保您正在呼叫哪個版本,並且應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM