unrecognized processes django wsgi uwsgi

django - processes - uWSGI no recargará, reiniciará ni me permitirá ejecutar el servicio



uwsgi vs gunicorn (1)

Tengo un problema bastante grande.

Soy muy nuevo en uwsgi y no estoy 100% seguro de cómo solucionar este problema, pero le daré información sobre dónde estoy.

  • Anteriormente he tenido sitios trabajando en esta configuración y, de repente, no está funcionando.
  • Estoy corriendo el modo Emperador.
  • Mis archivos ini están bien cuando uso la línea de comandos para ejecutarlos pero parece que no se inician automáticamente

Cuando corro uwsgi reload

sudo service uwsgi reload

Me sale este error

* Reloading app server(s) uwsgi ...fail!

Eso es. No consigo nada más.

He estado buscando horas en el desbordamiento de pila y no he encontrado nada que describa exactamente este problema, encontré mucho que ver con los archivos .ini de los usuarios, pero sé que NO es mi problema porque al ejecutar mi sitio manualmente a través de uwsgi --ini MYINI.ini luego acceder a él funciona perfectamente bien, el problema está en uWSGI y no sé cómo encontrar la solución a esta. He mirado en los documentos y no puedo encontrar nada en este error en particular.

Si esto le interesa a alguien, aquí está mi archivo uwsgi-server.conf

description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [!2345] respawn env LOGTO=/var/log/uwsgi.log env BINPATH=/usr/local/bin/uwsgi exec $BINPATH --emperor /etc/uwsgi/vassals --logto $LOGTO

Cualquier idea sería apreciada. Siento que me estoy perdiendo algo pero que soy tan nuevo con uWSGI que ni siquiera puedo adivinar qué puede ser, para mí todo parece estar bien según la documentación.

Si necesita más información sobre mi configuración por favor solo pregunte.


Usa uwsgi de la manera correcta

Usar uwsgi para ejecutar el sitio django en el servidor de ubuntu es bastante fácil, pero todavía hay algo que debe saber antes de cometer errores.

instalar

Tienes dos formas de instalar uwsgi en ubuntu: apt-get o pip

apt-get

Si usas apt-get, necesitas instalar el complemento de Python:

sudo apt-get install uwsgi-plugin-python sudo apt-get install uwsgi

Y, en su archivo uwsgi ini para su sitio, debe agregar esto:

plugins=python

pipa

Si usas pip, primero debes instalar python-dev:

sudo apt-get install python-dev sudo pip install uwsgi

Y, ya no necesitas los plugins=python en el archivo ini.

¿Ves el sudo antes de pip? Sí, uwsgi debe instalarse en el sistema global. Si pierde el sudo aquí, puede instalarlo en su virtualenv. No tiene sentido y puede tener problemas para ejecutarlo.

daemonize uwsgi

Daemonize significa hacer que uwsgi se ejecute en el arranque del sistema y en segundo plano. Según cómo instales uwsgi, tienes dos formas.

apt-get

Cuando apt-get install uwsgi en ubuntu, se instala automáticamente como un servicio. La magia se encuentra en este archivo:

/etc/init.d/uwsgi

Los archivos en /etc/init.d serán cargados por sysvinit. Entonces puedes administrar tu servicio de uwsgi de esta manera:

sudo /etc/init.d/uwsgi start|stop|restart|reload

o:

sudo service uwsgi start|stop|restart|reload

El comando service puede encontrar el servicio administrado por sysvinit.

pipa

Si uwsgi está instalado por pip, solo tiene el archivo ejecutable en /usr/local/bin/uwsgi , debe desemonizarlo usted mismo.

Cuando abre algunos de los archivos en /etc/init.d/ , puede sentirse triste: solo quiero registrar uwsgi como un servicio, ¿por qué necesito escribir un script tan largo que se parezca a los demás? No tiene sentido

La buena noticia es que es bastante simple con la ayuda de Upstart, que es una alternativa a sysvinit. Utiliza /etc/init/ lugar de /etc/init.d/ .

Simplemente cree un archivo /etc/init/uwsgi.conf con el siguiente contenido:

description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [!2345] respawn exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals/ --logto /var/log/uwsgi.log

y luego, puede administrar su proceso uwsgi de esta manera:

sudo initctl start|stop|restart|reload| uwsgi

o, aún esto:

sudo service uwsgi start|stop|restart|reload

Sí, como puede ver, el comando de servicio es inteligente, puede administrar el servicio desde sysvinit y Upstart, con el mismo comando.

Y, si tiene ambos /etc/init.d/uwsgi y /etc/init/uwsgi.conf , cuando diga:

sudo service uwsgi restart

Reiniciará el archivo Upstart /etc/init/uwsgi.conf . El sysvinit uno será ignorado, o algo similar.

config uwsgi para su sitio

Recomiendo a todos que usen el modo pip y Upstart, es mucho mejor que el método apt-get.

Si es así, estás usando el modo emperador de uwsgi, que es muy útil y poderoso.

Ahora, puede crear un archivo ini en /etc/uwsgi/vassals/ como esto:

[uwsgi] virtualenv=/path/to/venv/ chdir=/path/to/proj/root module=wsgi:application env=DJANGO_SETTINGS_MODULE=settings master=True vacuum=True socket=/tmp/%n.sock pidfile=/tmp/%n.pid daemonize=/var/log/uwsgi/%n.log

El %n significa su nombre de archivo. Por ejemplo, mi nombre de proyecto es ''example'', creo un archivo example.ini para él. Entonces el %n significa ''ejemplo''. No es necesario reemplazarlo con un nombre real. uwsgi hará esto por ti.

Y luego reinicie o vuelva a cargar uwsgi:

sudo service uwsgi restart

Revise su archivo de socket:

ll /tmp/*.sock

Si está ahí, tienes éxito con uwsgi ahora :)

nginx config para su sitio

Tome el dominio example.com por ejemplo:

server { listen 80; server_name www.example.com; return 301 $scheme://example.com$request_uri; } server { listen 80; charset utf-8; server_name example.com; location /static/ { alias /path/to/static/; } location /media/ { alias /path/to/media/; } location / { try_files $uri @django; } location @django { uwsgi_pass unix:///tmp/example.sock; include uwsgi_params; } }

reinicie nginx, verá su sitio!

responde a tu pregunta

Su archivo de configuración para uwsgi es /etc/init/uwsgi-server.conf Entonces, el nombre que debe usar es uwsgi-server , no uwsgi

necesitas reiniciar tu instancia de uwsgi emperador de esta manera:

sudo initctl restart uwsgi-server

o:

sudo service uwsgi-server restart

¡Eso es todo!