Google App Engine mit lokalem Django 1.1 erhält zeitweise Ausfälle
-
24-10-2019 - |
Frage
Ich verwende die Windows Launcher Development -Umgebung für Google App Engine.
Ich habe Django 1.1.2 Source heruntergeladen und das Subdimalektor von "Django" in mein Anwendungsverzeichnis (ein Peer von App.yaml) nicht tarred, um zu leben
In der oberen Stelle in jeder .py -Quelldatei mache ich Folgendes:
import settings
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'
In meinen Dateieinstellungen.py (die auch im Root des App -Verzeichnisses lebt) mache ich Folgendes:
DEBUG = True
TEMPLATE_DIRS = ('html')
INSTALLED_APPS = ('filters')
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'
from google.appengine.dist import use_library
use_library('django', '1.1')
from django.template import loader
Ja, das sieht ein bisschen wie Overkill aus, nicht wahr?
Ich verwende nur django.template. Ich benutze keinen anderen Teil von Django ausdrücklich.
In zeitweise bekomme ich jedoch einen von zwei Fehlern:
1) Django beschwert sich, dass Django_Setings_Module nicht definiert ist.
2) Django beschwert sich, dass Common.html (eine Vorlage, die ich in anderen Vorlagen ausdehnte) nicht existiert.
In 95% der Fälle treten diese Fehler nicht auf und sie werden zufällig gerade stattfinden. Einmal in diesem Zustand scheint der lokale Server "eingeklemmt" zu sein, und das Neustart von ihm behebt ihn im Allgemeinen.
Was verursacht dies und was kann ich dagegen tun? Wie kann ich es überhaupt debuggen?
Hier ist das Traceback aus dem Fehler:
Traceback (most recent call last):
File "C:\code\kwbudget\edit_budget.py", line 34, in get
self.response.out.write(t.render(template.Context(values)))
File "C:\code\kwbudget\django\template\__init__.py", line 165, in render
return self.nodelist.render(context)
File "C:\code\kwbudget\django\template\__init__.py", line 784, in render
bits.append(self.render_node(node, context))
File "C:\code\kwbudget\django\template\__init__.py", line 797, in render_node
return node.render(context)
File "C:\code\kwbudget\django\template\loader_tags.py", line 71, in render
compiled_parent = self.get_parent(context)
File "C:\code\kwbudget\django\template\loader_tags.py", line 66, in get_parent
raise TemplateSyntaxError, "Template %r cannot be extended, because it doesn't exist" % parent
TemplateSyntaxError: Template u'common.html' cannot be extended, because it doesn't exist
Und edit_budget.py startet mit genau den Zeilen, die ich oben aufgenommen habe.
Alle Vorlagen leben in einem Verzeichnis namens "HTML" in meinem Root -Verzeichnis, und "html/common.html" existiert. Ich weiß, dass die Template -Engine sie findet, da ich mit "html/edit_budget.html" beginne, die Common.html erweitert.
Es sieht so aus, als ob das Einstellungsmodul irgendwie nicht angewendet wird (da dies dem Suchpfad für Vorlagen HTML hinzufügt).
Lösung
Erstens, obwohl Django jetzt viel besser mit App Engine als einmal kompatibel ist, bestehen immer noch einige wichtige Inkompatibilitäten zwischen den beiden Plattformen, was bedeutet die Kiste. Die Dinge werden seltsam fehlerhaft sein.
Es gibt eine Reihe von Projekten, die darauf abzielen, die Kompatibilität zwischen den beiden Projekten zu verbessern. Am bekanntesten ist das App-Engine-Patch. Ich empfehle dringend, den folgenden Artikel zu lesen http://code.google.com/appengine/articles/app-gine-patch.html und der Rest der Artikel unter codel.google.com/appengine/articles/ unter der Registerkarte Django.
Bei einigen Ihrer spezifischen Probleme können Sie dies in Ihrem Setup -Skript versuchen:
#setup django environment
from django.core.management import setup_environ
import settings
setup_envion(settings)
Dies ist das, was Django intern verwendet, um die Umgebung in Manage.Py einzurichten, und ist die akzeptierte Best Practice für die Einrichtung von Django für die Verwendung mit Skripten (wie App Engine).
Andere Tipps
Ich habe genau das gleiche Problem und ich konnte nicht umgehen ... obwohl ich festgestellt habe .