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