0

djangoappengine.views.warmup は、GAE がウォームアップ リクエストを送信したときに、すべての Django アプリをロードするジョブを実行します。リクエストの急増またはウォームアップ サービスが有効になっていないために、GAE がウォームアップ リクエストを送信しない場合、INSTALLED_APPS はいつインポートされますか? djangoappengine.deferred.handler.application はすべての INSTALLED_APPS をロードしますが、djangoappengine.main.application はロードしません。

私が抱えている問題は、ウォームアップ要求がない場合、最初の読み込み要求ハンドラーまたは後続の要求ハンドラーのいずれかがまだ登録されていない非rel-searchモデルフィールドを必要とする可能性があることです.INSTALLED_APPSを介して検索がインポートされなかったため、自動検出() はまだ実行されていません。

私の設定 MIDDLEWARE_CLASSES には「autoload.middleware.AutoloadMiddleware」があるため、ウォームアップなしでそのようにロードできると思いますが、そうではありません。

リクエストを処理する前にすべてがロードされていることを確認するソリューションは何ですか?

4

1 に答える 1

0

解決策は、サイトの urls.py で search.autodiscover() を呼び出し、INSTALLED_APPS で autoload と search を使用し、MIDDLEWARE_CLASSES で autoload.middleware.AutoloadMiddleware を使用することです。

その理由は、djangoappengine.views.warmup と djangoappengine.deferred.handler.application は INSTALLED_APPS をロードし、search.autodiscover() が呼び出されますが、djangoappengine.main.application はそれを行わないためです。そのため、GAE インスタンスがリクエストによって直接起動された場合、検索インデックスは登録されません。したがって、これらのインデックスを登録するには、urls.py の search.autodiscover() が必要です。

于 2014-01-26T20:29:36.080 に答える