uWSGI皇帝模式不在Virtualenv之外工作

时间:2016-02-08 04:21:43

标签: python django virtualenv uwsgi

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

这是上面提到的船只:

# 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

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我遇到了“过早关闭的连接”问题,因为我试图通过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
  4. 可能还有其他一些;他们没有指出的是,你从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),以防您使用配置文件或附庸运行。

    4. 如果您选择点数版本:只需像平常一样使用它。
    5. 在所有情况下,请确保您正在调用哪个版本,并且您应该没问题。