web-dev-qa-db-fra.com

Django Webfaction 'Délai d'expiration lors de la lecture des en-têtes de réponse du processus démon'

Mon Django sur mon serveur de production hébergé sur Webfaction fonctionnait bien jusqu'à ce que j'essaie de redémarrer après avoir poussé une modification dans le fichier settings.py. J'ai couru

Apache2/bin/restart

comme d'habitude. Ensuite, j'ai essayé d'accéder à mon application sur mon navigateur et j'ai obtenu un délai d'expiration de la passerelle 504. J'ai regardé dans les journaux mod_wsgi et j'ai vu ceci:

[Thu Nov 03 23:46:53.605625 2016] [wsgi:error] [pid 8027:tid 139641332168448]
[client 127.0.0.1:34570] Timeout when reading response headers from daemon 
process 'myapp' : /home/<me>/webapps/<myapp>/<ProjectName>/<myapp>/wsgi.py

Qu'est-ce que cela signifie et comment y remédier? La seule chose que j'ai modifiée dans le fichier settings.py était de déplacer des noms de variables. Je peux toujours interagir avec succès avec l'application avec

python2.7 manage.py Shell

Mais je ne peux pas y accéder sur le Web, ni utiliser l'API.

EDIT: Voici mon fichier wsgi.py:

import os

from Django.core.wsgi import get_wsgi_application

os.environ.setdefault("Django_SETTINGS_MODULE", "<myapp>.settings")

application = get_wsgi_application()
17
Nick

Les modules d'extension Python C, comme numpy, sont connus pour provoquer des délais d'attente lorsqu'ils sont utilisés sous mod_wsgi. Il y a une explication claire du problème (directement de l'auteur de mod_wsgi) disponible à https://serverfault.com/a/514251/109598

Si cela semble être la cause de votre problème, alors la solution est probablement simple - ajoutez ce qui suit à votre httpd.conf:

WSGIApplicationGroup %{GLOBAL}

Assurez-vous de redémarrer votre instance Apache après avoir effectué cette modification.

23
Sean F

Essayez d'augmenter la directive Timeout dans httpd.conf, par défaut à 60 secondes dans Apache 2.4. Par exemple:

TimeOut 600
2
tuomastik

Voici comment j'ai pu trouver la cause première de mon problème.

python manage.py showmigrations

Mon application n'a pas pu atteindre le serveur de base de données, elle expirerait donc. En exécutant manage.py, je pouvais voir le message d'erreur sur la console.

1
Marston

Dans mon cas (Python 3.6), le module mimetypes a causé ce problème. Je n'ai pas approfondi la question, mais j'ai supprimé un appel à mimetypes.guess_type résolu le problème. L'appel a été effectué dans la fonction de vue Django view).

0
Markus