uWSGI no se ejecutará en un entorno mixto de Python para funcionar correctamente con nginx y ejecutar la aplicación Django

Ambiente: Ubuntu 16.04 (con el sistema Python en 2.7.12) ejecutándose en Vagrant / Virtualbox en Windows 10 host

Configuración de Python: Sistema python verificado haciendo python -V sin virtualenv's activado. Python 3.5 también está instalado, y lo he hechopipenv --three para crear el virtualenv para este proyecto. Haciendo python -V dentro del virtualenv activado (pipenv shell activar) muestra Python 3.5.2.

Antecedentes adicionales: Estoy desarrollando una aplicación Wagtail 2. Wagtail 2 requiere Django 2 que, por supuesto, requiere Python 3. Tengo otras aplicaciones de Django en esta máquina que se desarrollaron en Django 1.11 / Python 2.7 y son atendidas por Apache. Nos estamos moviendo a Django 2 / Python 3 para el desarrollo en el futuro y nos estamos moviendo a nginx / uWSGI para servir las aplicaciones.

He pasado por muchos tutoriales / muchas iteraciones. Todo el mapeo de puertos Vagrant está configurado bien con nginx que sirve archivos multimedia / estáticos y pasa solicitudes aguas arriba a la aplicación Django en un socket Unix, pero esto está dando un error 502 Gateway no encontrado porque uWSGI no se ejecutará correctamente. Por lo tanto, en este momento simplemente estoy ejecutando lo siguiente desde la línea de comandos para intentar que se ejecute uWSGI:uwsgi --ini /etc/uwsgi/sites/my_site.com.ini. Este archivo contiene:

[uwsgi]

uid = www-data
gid = www-data

plugin = python35

# Django-related settings
# the base directory (full path)
chdir=/var/sites/my_site
# Django's wsgi file
wsgi-file = my_site.wsgi
# the virtualenv (full path)
virtualenv=/root/.local/share/virtualenvs/my_site-gmmiTMID

# process-related settings
# master
master = True
# maximum number of worker processes
processes = 10

# the socket (use the full path to be safe)
socket = /tmp/my_site.sock

# clear environment on exit
vacuum = True

Intenté instalar uWSGI de las siguientes maneras:

todo el sistema conpip install uwsgi tanto comopip3 install uwsgiutilizandoapt-get install uwsgi uwsgi-plugin-python3

Me he asegurado de que solo haya una instalación a la vez desinstalando cualquier instalación anterior de uwsgi. El último método de instalación coloca uwsgi-core en usr / bin y también coloca en accesos directos usr / bin a uwsgi, uwsgi_python3 y uwsgi_python35.

En el archivo .ini también he intentadoplugin = python3. También lo intenté desde la línea de comando:

uwsgi_python3 --ini /etc/uwsgi/sites/my_site.com.iniuwsgi_python35 --ini /etc/uwsgi/sites/my_site.com.ini

He intentado ejecutar eluwsgi ... .ini comandos desde el entorno virtual activado y con el virtualenv desactivado. Cada una de las tres líneas de comandouwsgi ... .ini ejecucionesuwsgi ..., uwsgi_python3 ... yuwsgi_python35 ...) HACER que se ejecute el archivo .ini, pero cada vez recibo el siguiente error (las dos últimas líneas de las siguientes declaraciones):

[uwsgi] implicit plugin requested python35
[uWSGI] getting INI configuration from /etc/uwsgi/sites/my_site.com.ini
*** Starting uWSGI 2.0.12-debian (64bit) on [Wed Mar  7 03:54:44 2018] ***
compiled with version: 5.4.0 20160609 on 31 August 2017 21:02:04
os: Linux-4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018
nodename: vagrant-ubuntu-trusty-64
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 2
current working directory: /vagrant/my_site
detected binary path: /usr/bin/uwsgi-core
setgid() to 33
setuid() to 33
chdir() to /var/sites/my_site
your processes number limit is 7743
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/my_site.sock fd 3
Python version: 3.5.2 (default, Nov 23 2017, 16:37:01)  [GCC 5.4.0 20160609]
Set PythonHome to /root/.local/share/virtualenvs/my_site-gmmiTMID
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

Si entro en la línea de comando de Python dentro del virtualenv activado y hagoimport encodings, importa bien (sin mensaje, solo vuelve a la línea de comando). La búsqueda de este error en particular no ha resultado útil. ¿Alguna idea de por qué ImportError: no aparece ningún módulo llamado 'codificaciones'?

ACTUALIZACIÓN - PROBLEMA SIGUE OCURRIENDO

Estoy usando pipenv, y almacena virtualenvs individuales en el/home/username/.local/share/virtualenvs carpeta. Aunque pude iniciar uWSGI desde la línea de comandos ejecutando el archivo de configuración uWSGI como usuario vagabundo (ver comentario más abajo), todavía no he podido iniciar el servicio con/home/vagrant/.local/share/virtualenvs/my_venv en el archivo de configuración uWSGI. Intenté agregar el usuario vagabundo al grupo www-data y agregar el usuario www-data al grupo vagabundo. También puse permiso de lectura y ejecución para el mundo en todo el camino (incluido el venv individual), pero el servicio uWSGI aún no se iniciará.

Una solución hackiana

Finalmente conseguí que el servicio uWSGI comenzara copiando el venv a/opt/virtualenvs/my_venv. Entonces pude comenzar el servicio consudo service uwsgi start. La propiedad de todo ese camino es raíz: raíz.

TODAVÍA EN BUSCA DE UNA SOLUCIÓN...

Esta solución no es óptima ya que ahora estoy ejecutando desde un virtualenv que tendrá que actualizarse cuando se actualice el virtualenv predeterminado ya que esta ubicación no es la predeterminada para pipenv, por lo que todavía estoy buscando respuestas. Quizás es un error de permisos de Ubuntu, pero simplemente no puedo encontrar el problema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta