【问题标题】:uWSGI Emperor Mode Not Working Outside of VirtualenvuWSGI 皇帝模式在 Virtualenv 之外不起作用
【发布时间】:2016-02-08 04:21:42
【问题描述】:

我正在尝试使用皇帝模式和容器通过 uWSGI 运行 Django 应用程序,容器正确指向 ini 文件,并且 ini 文件将 home 定义为 /home/user /.virtualenvs/myvirtualenv,但是这不起作用(日志说连接过早关闭)。但是,如果我在 virtualenv 中运行相同的命令,一切正常,所以我猜测 uWSGI 忽略了home 选项。然而,这并没有用,因为我需要运行几个不同的应用程序,每个应用程序都使用自己的 virtualenv(因此我需要帝王模式)。

这是提到的容器 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/

这是我用来运行 Emperor 的命令(我使用与托管应用程序的用户相同的用户,以避免出现更多文件权限问题):

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

我做错了什么?

【问题讨论】:

  • uWSGI 日志说明了什么?请注意,您的 virtualenv 中的 python 版本必须与用于构建 uWSGI 服务器的 python 的前 2 个数字版本匹配。另请注意,您可以在您的 virtualenv 中安装不同版本的 uWSGI,并且您在切换到 virtualenv 时会调用该版本。此外,uWSGI 可以在没有 python 支持的情况下构建(因此您可以使用插件使用不同的 python 版本)。
  • 我一直在研究这个问题,我安装的所有不同版本的 uwsgi 都一团糟(pip global、pip local、pip on the virtualenv 等)。清理完毕后,我会更新问题。

标签: python django virtualenv uwsgi


【解决方案1】:

我遇到了“连接过早关闭”的问题,因为我试图通过 NGINX 和 uWSGI 与应用程序通信。真正的问题是容器没有正确加载,通过手动运行它(在 virtualenv 之外),我发现问题是 'site' module not found 错误,这反过来又是因为全局安装(使用百胜,顺便说一句),分销商提供的 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 quickstart guide 指出的那样,分发器可能以“模块化”方式编译 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-python3.x86_64 软件包,以及以下软件包:uwsgi-router-http.x86_64uwsgi-plugin-common.x86_64,以及您可能需要的其他软件包。然后,在任何其他选项之前,使用--plugin 选项运行您的uwsgi 实例以启用python 或python3 支持。 'site' module not found 错误现在应该消失了。您也可以在 ini 文件中使用该选项(如 plugin = python3),以防您使用配置文件或 vassals 运行。

  4. 如果您选择 pip 版本:请像往常一样使用它。

在所有情况下,请确保您调用的是哪个版本,您应该没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2013-06-14
    • 2015-05-21
    相关资源
    最近更新 更多