Question

J'ai eu quelques problèmes avec une application Django après que je déploiement à l'échelle. J'utilise un Apache + mod-wsgi sur un serveur ubuntu. Un certain temps après que je redémarre le serveur le temps passe foobar, il est faux d'environ -10 heures. J'ai fait une vue Django qui ressemble à:

def servertime():
  return HttpResponse( datetime.now() )

et après que je redémarre le serveur et vérifier l'URL qui montre ce point de vue, il regarde d'abord bien. Puis à un moment donné, il donne parfois l'heure et parfois plus tard et il donne le mauvais moment toujours. Le temps du serveur est corect bien.

Les indices? Je l'ai googlé sans chance.

Était-ce utile?

La solution 2

J'ai trouvé que la mise wsgi en mode démon fonctionne. Je ne sais pas pourquoi, mais il l'a fait. On dirait que certains des processus nouvellement créés obtient le temps foiré.

Autres conseils

Puis-je voir votre urls.py ainsi?

comportements similaires me perplexes une fois avant ...

Qu'est-ce qu'il est avéré être le chemin était que mon urls.py a appelé la vue. Python a couru le datetime.now () une fois et stocké que pour les appels futurs, jamais vraiment l'appeler à nouveau. Voilà pourquoi les devs django ont dû mettre en œuvre la possibilité de passer une fonction, pas un appel de fonction, à la valeur par défaut d'un modèle, car il prendrait le premier appel de la fonction et l'utiliser jusqu'à ce python est redémarré.

Votre comportement ressemble à la première fois est correcte parce que son la première fois la vue a été appelé. Il était incorrect parfois parce qu'il a cette même date à nouveau. Puis ce fut au hasard à nouveau correct parce que votre apache a probablement commencé un autre processus de travail pour elle, et la folie arrive probablement quand vous obtenez entre rebondi qui manipulait la demande processus.

datetime.now () est probablement en cours d'évaluation une fois, lorsque votre classe est instanciée. Essayez de supprimer la parenthèse pour que la fonction datetime.now est retournée et ensuite évalués. J'ai eu un problème similaire avec la définition des valeurs par défaut pour mes DateTimeFields et écrit ma solution .

Peut-être que le serveur évalue la datetime.now () au démarrage du serveur, essayez de faire ce paresseux à travers un modèle ou utiliser une variable dans la vue.

Jetez un oeil à cette message .

Django définit le fuseau horaire du système en fonction de vos paramètres de time_zone variable. Cela peut conduire à toutes sortes de confusion lors de l'exécution de plusieurs instances de Django avec différents paramètres de time_zone.

Voici ce que fait Django:

os.environ['TZ'] = self.TIME_ZONE

La réponse ci-dessus:

  

"Je trouve que la mise wsgi en mode démon fonctionne"

ne fonctionne pas pour moi ...

Je pense que je vais de ne pas utiliser django construit dans TIME_ZONE plus.

vous devrez peut-être spécifier le type de contenu comme si

def servertime():
  return HttpResponse( datetime.now(), content_type="text/plain" )

Une autre idée:

il ne peut pas travailler parce que datetime.now () retourne un objet datetime. Essayez ceci:

def servertime():
  return HttpResponse( str(datetime.now()), content_type="text/plain" )

Essayez de définir votre fuseau horaire (variable time_zone) dans settings.py

Cela a fonctionné pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top