tutorial english documentacion docs createsuperuser python django import wsgi gunicorn

english - Error de importación de la aplicación Python en Django con WSGI gunicornio



docs django project (3)

Descubierto mi problema Necesario para agregar el directorio del proyecto a la ruta Python, no al directorio de la aplicación, es decir, topturk / top en lugar de topturk / top / turk para importar módulos de directorio turk.

python top/manage.py run_gunicorn

y

python top/manage.py runserver

funcionaban bien porque según la documentación de la ruta Python, el directorio del módulo llamante siempre se agrega como elemento 0 en la tupla de la ruta Python, por lo que cuando top / manage.py se usaba, topturk / top siempre estaba en la ruta de Python.

Sin embargo, con heroku, Procfile está en el directorio principal del proyecto, topturk y no topturk / top, por lo que cuando se ejecutan los comandos Procfile topturk se agrega a la ruta Python pero no a topturk / top, y por lo tanto a los errores.

En retrospectiva, descubrió que esto es a lo que se refería la documentación de Django en la última oración de esta sección: https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/gunicorn/#running-django-in -gunicorn-as-a-generic-wsgi-application , donde dicen que para ejecutar este comando el proyecto debe estar en la ruta de Python.

Problema resuelto agregando

sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))

a settings.py o wsgi.py - agregado a settings.py ya que parece lo que otras personas han recomendado (http://codespatter.com/2009/04/10/how-to-add-locations-to- python-path-for-reusable-django-apps /), pero no estoy seguro de cuál es el mejor lugar para colocar el inserto. ¿Nadie sabe?

Estoy tratando de implementar una aplicación de Django con Gunicorn en Heroku y me he encontrado con algunos enganches.

Cuando comencé mi proyecto, mi versión de Django era 1.3 y no contenía el módulo wsgi.py estándar, así que agregué el módulo estándar de wsgi como top / wsgi.py (el nombre de mi proyecto era el más alto, el nombre de mi aplicación era turco, topturk siendo el directorio contenedor - preservado para que los registros de error tengan sentido a continuación).

Ahora cuando corro

gunicorn top.wsgi:application -b 0.0.0.0:$PORT

El servidor se inicia correctamente,

19:00:42 web.1 | started with pid 7869 19:00:42 web.1 | 2012-07-25 19:00:42 [7869] [INFO] Starting gunicorn 0.14.5 19:00:42 web.1 | 2012-07-25 19:00:42 [7869] [INFO] Listening at: http://0.0.0.0:5000 (7869) 19:00:42 web.1 | 2012-07-25 19:00:42 [7869] [INFO] Using worker: sync 19:00:42 web.1 | 2012-07-25 19:00:42 [7870] [INFO] Booting worker with pid: 7870

pero cuando navego a 0.0.0.0:5000 me devuelven un error interno del servidor:

19:00:45 web.1 | 2012-07-25 17:00:45 [7870] [ERROR] Error handling request 19:00:45 web.1 | Traceback (most recent call last): 19:00:45 web.1 | File "/Users/intenex/Dropbox/code/django/topturk/venv/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 102, in handle_request 19:00:45 web.1 | respiter = self.wsgi(environ, resp.start_response) 19:00:45 web.1 | File "/Users/intenex/Dropbox/code/django/topturk/venv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__ 19:00:45 web.1 | self.load_middleware() 19:00:45 web.1 | File "/Users/intenex/Dropbox/code/django/topturk/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 47, in load_middleware 19:00:45 web.1 | raise exceptions.ImproperlyConfigured(''Error importing middleware %s: "%s"'' % (mw_module, e)) 19:00:45 web.1 | ImproperlyConfigured: Error importing middleware turk.middleware.subdomain: "No module named turk.middleware.subdomain" 19:00:47 web.1 | 2012-07-25 17:00:47 [7870] [ERROR] Error handling request 19:00:47 web.1 | Traceback (most recent call last): 19:00:47 web.1 | File "/Users/intenex/Dropbox/code/django/topturk/venv/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 102, in handle_request 19:00:47 web.1 | respiter = self.wsgi(environ, resp.start_response) 19:00:47 web.1 | File "/Users/intenex/Dropbox/code/django/topturk/venv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__ 19:00:47 web.1 | self.load_middleware() 19:00:47 web.1 | File "/Users/intenex/Dropbox/code/django/topturk/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 47, in load_middleware 19:00:47 web.1 | raise exceptions.ImproperlyConfigured(''Error importing middleware %s: "%s"'' % (mw_module, e)) 19:00:47 web.1 | ImproperlyConfigured: Error importing middleware turk.middleware.subdomain: "No module named turk.middleware.subdomain"

Asumo que este es un error de ruta de Python, donde el servidor no sabe cómo importar desde mi directorio de aplicaciones

El código de importación relevante está aquí en la configuración:

MIDDLEWARE_CLASSES = ( ''turk.middleware.subdomain.SubdomainMiddleware'', ''turk.middleware.removewww.RemoveWWWMiddleware'', )

Intenté solucionar este problema insertando el directorio de mi aplicación en sys.path como en la parte superior de mi archivo settings.py, así:

PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(1, PROJECT_ROOT+''/turk/'')

Lo que he verificado agrega el directorio de la aplicación a la ruta, pero aún no hay dados. ¿Algunas ideas? también

sys.path.insert(1, PROJECT_ROOT+''/turk/'')

parece hackish y agrega al menos dos copias del directorio a la ruta, ¿cuál es la forma correcta de agregar PYTHON_PATH en Django? ¡Gracias!


Agrega "gunicorn" en settings.py/INSTALLED_APPS y usa

python manage.py run_gunicorn 127.0.0.0:8001

(sea cual sea el puerto que desee) Para obtener más información, visite: https://pypi.python.org/pypi/gunicorn/


El método bien anterior ha sido desaprobado por el gunicornio ahora. ¡Cuando intenté lo mismo si fallaba con un mensaje de advertencia!

(venv) root @ ip-172-31-23-172: ~ / myproj # python manage.py run_gunicorn 0.0.0.0:8001

!!!

!!! ADVERTENCIA: este comando está en desuso.

!!!

!!! Ahora debería ejecutar su aplicación con la interfaz WSGI

!!! instalado con tu proyecto Ex.:

!!!

!!! gunicorn myproject.wsgi: aplicación

!!!

!!! Ver https://docs.djangoproject.com/en/1.5/howto/deployment/wsgi/gunicorn/

!!! para más información.

!!!

Por lo tanto, probé debajo del comando y funcionó para mí.

gunicorn myproject.wsgi:application