gpt4 book ai didi

python - uWSGI Empire 模式无法在 Virtualenv 之外工作

转载 作者:行者123 更新时间:2023-12-01 04:08:36 25 4
gpt4 key购买 nike

我正在尝试使用Emperor模式和容器通过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

我做错了什么?

最佳答案

我遇到了“过早关闭连接”问题,因为我试图通过 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 quickstart guide指出,分发者可以以“模块化”方式编译uWSGI:

One thing you may want to take into account when testing this quickstart with distro-supplied packages, is that very probably your distribution has built uWSGI in modular way (every feature is a different plugin that must be loaded). To complete this quickstart, you have to prepend --plugin python,http to the first series of examples, and --plugin python when the HTTP router is removed…

而您通过 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 错误现在应该消失了。如果您使用配置文件或vassals运行,您还可以在ini文件中使用该选项(例如plugin = python3)。

  4. 如果您选择 pip 版本:只需像平常一样使用即可。

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

关于python - uWSGI Empire 模式无法在 Virtualenv 之外工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com