examples python django nginx gunicorn

python - examples - seaborn



Gunicorn, ningún módulo llamado ''myproject (1)

Estoy instalando un sitio web creado previamente en un nuevo servidor. No soy el desarrollador original.

He usado Gunicorn + nginx en el pasado para mantener viva la aplicación (básicamente siguiendo este tutorial ), pero tengo problemas con ella aquí

I source venv/bin/activate ./manage.py runserver 0.0.0.0:8000 , luego ./manage.py runserver 0.0.0.0:8000 funciona bien y todo funciona como se esperaba. Lo gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application y gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application , y obtengo lo siguiente:

[2016-09-13 01:11:47 +0000] [15259] [INFO] Starting gunicorn 19.6.0 [2016-09-13 01:11:47 +0000] [15259] [INFO] Listening at: http://0.0.0.0:8000 (15259) [2016-09-13 01:11:47 +0000] [15259] [INFO] Using worker: sync [2016-09-13 01:11:47 +0000] [15262] [INFO] Booting worker with pid: 15262 [2016-09-13 01:11:47 +0000] [15262] [ERROR] Exception in worker process Traceback (most recent call last): File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker worker.init_process() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 126, in init_process self.load_wsgi() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi self.wsgi = self.app.wsgi() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load return self.load_wsgiapp() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp return util.import_app(self.app_uri) File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/util.py", line 357, in import_app __import__(module) ImportError: No module named ''myproject.wsgi'' [2016-09-13 01:11:47 +0000] [15262] [INFO] Worker exiting (pid: 15262) [2016-09-13 01:11:47 +0000] [15259] [INFO] Shutting down: Master [2016-09-13 01:11:47 +0000] [15259] [INFO] Reason: Worker failed to boot.

Creo que tiene algo que ver con la estructura de toda la aplicación. Antes, he construido aplicaciones con la estructura básica de:

myproject ├── manage.py ├── myproject │   ├── urls.py │   ├── views.py │   ├── component1 │ │   ├── urls.py │ │   └── views.py │   ├── component2 │ │   ├── urls.py │ │   └── views.py ├── venv │   ├── bin │   └── ...

Éste, en cambio, tiene una estructura como:

myproject ├── apps │   ├── blog │ │   ├── urls.py │ │   ├── views.py │   │ └── ... │   ├── catalogue │ │   ├── urls.py │ │   ├── views.py │   │ └── ... │   ├── checkout │ │   ├── urls.py │ │   ├── views.py │   │ └── ... │   ├── core │ │   ├── urls.py │ │   ├── views.py │   │ └── ... │   ├── customer │   ├── dashboard │   └── __init__.py ├── __init__.py ├── manage.py ├── project_static │   ├── assets │   ├── bower_components │   └── js ├── public │   ├── emails │   ├── media │   └── static ├── settings │   ├── base.py │   ├── dev.py │   ├── __init__.py │   ├── local.py │   └── production.py ├── templates │   ├── base.html │   ├── basket │   ├── blog │   └── .... ├── urls.py ├── venv │   ├── bin │   ├── include │   ├── lib │   ├── pip-selfcheck.json │   └── share └── wsgi.py

Entonces, no hay un módulo ''principal'' ejecutando el programa, que es lo que espero que gunicorn esté buscando.

¿Alguna idea?

wsgi.py :

import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") application = get_wsgi_application()


Su mensaje de error es

ImportError: No module named ''myproject.wsgi''

Corriste la aplicación con

gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

Y wsgi.py tiene la línea

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

Esta es la desconexión. Para reconocer el proyecto como myproject.wsgi el directorio principal tendría que estar en la ruta de Python ... en ejecución

cd .. && gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

Eliminaría ese error. Sin embargo, obtendría un error diferente porque el archivo wsgi.py se refiere a la settings lugar de myproject.settings . Esto implica que la aplicación estaba pensada para ejecutarse desde el directorio raíz en lugar de un directorio hacia arriba. Puede resolver esto de manera segura mirando el código: si usa importaciones absolutas, ¿se suele decir from myproject.app import ... o from app import ... ? Si esa suposición es correcta, su comando correcto es

gunicorn --bind 0.0.0.0:8000 wsgi:application

Si la aplicación utiliza myproject en todas las rutas, tendrá que modificar su PYTHONPATH para ejecutarlo correctamente ...

PYTHONPATH=`pwd`/.. gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application