2010-06-06 13 views
5

Używam środowiska programistycznego Windows La dla Google App Engine.Google App Engine z lokalnym Django 1.1 przechodzi przerywane awarie

Pobrałem Django 1.1.2 źródło i un-tarrred podkatalog "Django" żyć w moim katalogu aplikacji (peer z app.yaml)

Na górze każdego pliku źródłowego .py, I to zrobić:

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 

Tak, to wygląda trochę jak:

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

W moim settings.py pliku (który mieszka w katalogu głównym aplikacji, jak również), to zrobić przesada, nie t?

Używam tylko django.template. Nie używam jawnie żadnej innej części django.

Jednak sporadycznie uzyskać jeden z dwóch błędów:

1) Django narzeka, że ​​DJANGO_SETTINGS_MODULE nie jest zdefiniowana.
2) Django skarży się, że common.html (szablon, który rozwijam w innych szablonach) nie istnieje.

95% czasu, te błędy nie są napotykane, a losowo po prostu zaczynają się dziać. Po przejściu w tym stanie serwer lokalny wydaje się "zaklinowany", a jego ponowne uruchomienie zazwyczaj go naprawia.

Co powoduje to i co mogę z tym zrobić? Jak mogę to debugować?

Oto traceback z błędem:

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 

I edit_budget.py rozpoczyna się dokładnie w tych liniach, że zawarte w górę szczyt.

Wszystkie szablony żyją w katalogu o nazwie "html" w moim katalogu głównym, a "html/common.html" istnieje. Wiem, że silnik szablonowy je znajduje, ponieważ zaczynam od "html/edit_budget.html", który rozszerza common.html.
Wygląda na to, że moduł ustawień w jakiś sposób nie jest zastosowany (ponieważ to właśnie dodaje kod HTML do ścieżki wyszukiwania szablonów).

+0

Czy możesz potwierdzić, że plik settings.py, który pokazujesz, jest zawsze tym, który jest importowany? Pewna odmiana sys.path (prawdopodobnie spowodowana przez PYTHONPATH w środowisku?) Może być może wyjaśnić różnice w zachowaniu (poprzez import "niewłaściwego" ustawienia settings.py). –

+0

Nie ustawiam PYTHONPATH. Problem polega na tym, że działa poprawnie w przypadku pierwszych 10-20 żądań. Potem "klnie", a kiedy "klina", nigdy się nie regeneruje. Ponieważ jest to podczas programowania, moduły obsługi niekiedy rzucają, chociaż wychwytuję wszystkie wyjątki i drukuję kod diagnostyczny + wynikowy, więc wyjątki nie pojawiają się w środowisku wykonawczym WSGI. Zastanawiam się, co może spowodować, że nagle przestanie działać? –

+0

Na przykład jedną z możliwych przyczyn może być automatyczne ładowanie w środowisku programistycznym. Czy są tam jakieś znane problemy? Masz na co zwrócić uwagę? –

Odpowiedz

1

Po pierwsze, chociaż django jest teraz dużo bardziej kompatybilny z silnikiem aplikacji niż kiedyś, niektóre główne niezgodności nadal istnieją między tymi dwiema platformami, co oznacza, że ​​nie można po prostu zrzucić zapasowej kopii django do katalogu appengine i to działa po wyjęciu z pudełka. Rzeczy będą dziwne w błędach.

Istnieje szereg projektów, które mają na celu poprawę zgodności między dwoma projektami, z których najważniejszą jest aplikacja typu "maszyna-łatka". Sugeruję przeczytanie następującego artykułu: http://code.google.com/appengine/articles/app-engine-patch.html i pozostałych artykułów znajdujących się pod adresem code.google.com/appengine/articles/ pod kartą django.

jak niektórzy z was są konkretne problemy, można spróbować tego w skrypcie konfiguracyjnym:

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

To właśnie Django używa wewnętrznie do konfigurowania środowiska w manage.py i jest akceptowane najlepiej praktyka konfigurowania django do użytku ze skryptami (takimi jak silnik aplikacji).

0

Mam dokładnie ten sam problem i nie mogłem go obejść ... chociaż zauważyłem, że dzieje się o wiele mniej z prawdziwym GAE niż z uruchomionym serwerem rozwoju na mojej stacji roboczej Linux.