ローカルdjango1.1を備えたGoogleアプリエンジンは断続的な障害を取得します
-
24-10-2019 - |
質問
Google App EngineにWindows Launcher開発環境を使用しています。
Django 1.1.2ソースをダウンロードして、「Django」サブディレクトリをアプリケーションディレクトリ内に住んでいません(app.yamlのピア)
各.pyソースファイルの上部で、私はこれを行います:
import settings
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'
私のファイルsettings.py(アプリディレクトリのrootに存在する)で、これを行います。
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
はい、これはやり過ぎのように見えますよね?
django.templateのみを使用しています。私はDjangoの他の部分を明示的に使用していません。
ただし、断続的に2つのエラーのいずれかが取得されます。
1)djangoは、django_settings_moduleが定義されていないと不満を述べています。
2)djangoは、common.html(他のテンプレートで拡張しているテンプレート)が存在しないと不満を述べています。
95%の時間、これらのエラーは発生しておらず、ランダムに発生し始めます。その状態に入ると、ローカルサーバーは「くさび」と思われ、一般的に再起動します。
これが何が起こるのか、そして私はそれについて何ができますか?どうすればデバッグできますか?
これがエラーからのトレースバックです:
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
edit_budget.pyは、私がトップに含めたまさに行から始まります。
すべてのテンプレートは、私のルートディレクトリの「html」という名前のディレクトリに存在し、「html/common.html」が存在します。 common.htmlを拡張する「HTML/edit_budget.html」から始めて、テンプレートエンジンがそれらを見つけることを知っています。
設定モジュールが何らかの形で適用されていないかのように見えます(それがテンプレートの検索パスにHTMLを追加するものだからです)。
解決
第一に、Djangoは現在、App Engineとははるかにはるかに互換性がありますが、2つのプラットフォームの間にはいくつかの主要な互換性が依然として存在します。つまり、DjangoのストックコピーをAppengineディレクトリに捨てて動作させることはできません。ボックス。物事は奇妙な方法でエラーが発生します。
2つのプロジェクト間の互換性を改善することを目的とした多くのプロジェクトがありますが、最も顕著なのはアプリエンジンパッチです。次の記事を読むことを強くお勧めします http://code.google.com/appengine/articles/app-engine-patch.html djangoタブの下にあるcode.google.com/appengine/articles/にある残りの記事。
特定の問題の一部については、セットアップスクリプト内でこれを試すことができます。
#setup django environment
from django.core.management import setup_environ
import settings
setup_envion(settings)
これは、Djangoがmanage.py内の環境をセットアップするために内部的に使用するものであり、スクリプト(アプリエンジンなど)で使用するためにDjangoをセットアップするための受け入れられたベストプラクティスです。
他のヒント
私はまったく同じ問題を抱えていて、それを回避することができませんでした...私はそれが私のLinuxワークステーションで実行されている開発サーバーよりも実際のゲーではそれがはるかに少ないことに気づいていますが。