2010-06-06 13 views
5

Estoy usando el entorno de desarrollo de Windows Launcher para Google App Engine.Google App Engine con Django 1.1 local obtiene fallas intermitentes

He descargado Django 1.1.2 fuente, y poco tarrred el subdirectorio "Django" vivir dentro de mi directorio de la aplicación (un compañero de app.yaml)

En la parte superior de cada fichero fuente .py, hago esto:

import settings 
import os 
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings' 

en mi settings.py archivo (que vive en la raíz del directorio de aplicación, también), hago esto:

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 

Sí, esto parece un poco Exageración, ¿no? t?

Solo uso django.template. No utilizo explícitamente ninguna otra parte de django.

Sin embargo, de forma intermitente puedo obtener uno de los dos errores:

1) Django se queja de que DJANGO_SETTINGS_MODULE no está definido.
2) Django se queja de que common.html (una plantilla que extiendo en otras plantillas) no existe.

95% de las veces, estos errores no se encuentran, y al azar comienzan a suceder. Una vez en ese estado, el servidor local parece "encajado" y volver a arrancarlo generalmente lo arregla.

¿Qué está causando esto y qué puedo hacer al respecto? ¿Cómo puedo depurarlo?

Aquí es el rastreo del error:

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 

Y edit_budget.py comienza con exactamente las líneas que incluía hasta la parte superior.

Todas las plantillas viven en un directorio llamado "html" en mi directorio raíz, y "html/common.html" existe. Sé que el motor de plantillas los encuentra, porque empiezo con "html/edit_budget.html" que extiende common.html.
Parece que el módulo de configuración de alguna manera no se aplica (porque eso es lo que agrega html a la ruta de búsqueda de plantillas).

+0

¿Puedes confirmar que el archivo settings.py que muestras es siempre el que se está importando? Alguna variación de sys.path (posiblemente causada por PYTHONPATH en el entorno?) Tal vez explique las diferencias de comportamiento (a través de la importación de una configuración "incorrecta"). –

+0

No configuro PYTHONPATH. Y, el problema es que funciona bien para las primeras 10-20 solicitudes. Luego se "acuña", y cuando se "acuña", nunca se recupera. Debido a que esto ocurre durante el desarrollo, los manejadores lanzan a veces, aunque capturo todas las excepciones e imprimo un código de diagnóstico + resultado, por lo que las excepciones no aparecen hasta el tiempo de ejecución de WSGI. Me pregunto qué podría hacer que deje de funcionar repentinamente. –

+0

Entonces, por ejemplo, una posible causa podría ser el recargador automático en el entorno de desarrollo. ¿Hay algún problema conocido allí? ¿Algo a tener en cuenta? –

Respuesta

1

En primer lugar, aunque django ahora es MUCHO más compatible con el motor de aplicaciones que una vez, aún existen algunas incompatibilidades importantes entre las dos plataformas, lo que significa que no puedes volcar una copia de django en tu directorio appengine y tener funciona fuera de la caja. Las cosas se equivocarán de maneras extrañas.

Hay una serie de proyectos que tienen como objetivo mejorar la compatibilidad entre los dos proyectos, el más destacado es el app-engine-patch. Recomiendo leer el siguiente artículo http://code.google.com/appengine/articles/app-engine-patch.html y el resto de los artículos ubicados en code.google.com/appengine/articles/ en la pestaña django.

como para algunos de los problemas específicos usted es, usted podría intentar esto dentro de la secuencia de comandos de configuración:

#setup django environment 
from django.core.management import setup_environ 
import settings 
setup_envion(settings) 

esto es lo que Django usa internamente para la configuración del entorno dentro manage.py y es el mejor aceptada práctica para configurar django para su uso con scripts (como el motor de aplicaciones).

0

Tengo exactamente el mismo problema, y ​​no he podido evitarlo ... aunque me he dado cuenta de que pasa mucho menos con el GAE real que con el servidor de desarrollo que ejecuto en mi estación de trabajo Linux.