1

Python 2.7/mod_wsgi 3.3 を使用して Django 1.2.5 を実行している Django サイトを運用しています。ほとんどの場合、すべてがうまく機能しますが、サイトが完全にランダムにエラーをスローしているようです. それらはすべて次の形式で終わります。

テンプレートが存在しません: xxx

これらのテンプレートは確かに存在し、例外の原因となった URL を入力すると、その URL は常に機能しているように見えます。ただし、約 30 ページ ビューごとに 1 回、このエラーがスローされます。

同様の問題に関するこの投稿を見つけました: http://leequerv.blogspot.com/2009/11/re-settingspy-seems-to-be-cached-or_24.htmlしかし、私はDjangoアプリケーションを1つしか実行していないので、そうではありません'直接適用されるようです。

サイトのサブドメインに応じてテンプレート ディレクトリを交換するサブドメイン ミドルウェアを使用しています (つまり、サブドメインがない場合は通常のテンプレート ディレクトリを使用し、m.xxx サブドメインがある場合はモバイル テンプレート ディレクトリを使用します)。これらの散発的な本番サーバーエラーを除いて、これらはすべて、開発サーバーと本番サーバーの両方でうまく機能します。多くの人がサイトを使用しているときに競合状態が発生している可能性はありますか?

何が原因なのか、どこから調べればよいのか、何か考えはありますか?

編集:

テンプレート ディレクトリが切り替えられるミドルウェア コードの一部を次に示します。

    subdomain = getattr(request, 'subdomain', False)

    if subdomain is not False:
        try:
            request.urlconf = settings.SUBDOMAIN_URLCONFS[subdomain]
        except KeyError:
            pass
        try:
            settings.TEMPLATE_DIRS = settings.SUBDOMAIN_TEMPLATE_DIRS[subdomain]
        except KeyError:
            pass

テンプレートディレクトリ情報を保持する私の設定ファイルの一部は次のとおりです。

SUBDOMAIN_URLCONFS = { None: 'my_site.urls', 'm': 'mobile.urls' }

JQM_TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, "templates/mobile/"),
)

SUBDOMAIN_TEMPLATE_DIRS = {
    None: TEMPLATE_DIRS,
    'm': JQM_TEMPLATE_DIRS
}

編集#2

これが私のトレースバックです:

Traceback (most recent call last):

 File "/home/my_username/webapps/my_site/lib/python2.7/django/core/handlers/base.py", line 100, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/home/my_username/python-environments/my_site/lib/python2.7/site-packages/endless_pagination/decorators.py", line 55, in decorated
   return view(request, *args, **kwargs)

 File "/home/my_username/webapps/my_site/my_site/local_apps/team/views.py", line 68, in team_detail
   return render_to_response(template, context, context_instance=RequestContext(request))

 File "/home/my_username/webapps/my_site/lib/python2.7/django/shortcuts/__init__.py", line 20, in render_to_response
   return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

 File "/home/my_username/webapps/my_site/lib/python2.7/django/template/loader.py", line 181, in render_to_string
   t = get_template(template_name)

 File "/home/my_username/webapps/my_site/lib/python2.7/django/template/loader.py", line 157, in get_template
   template, origin = find_template(template_name)

 File "/home/my_username/webapps/my_site/lib/python2.7/django/template/loader.py", line 138, in find_template
   raise TemplateDoesNotExist(name)

TemplateDoesNotExist: team_detail.html
4

2 に答える 2

0

この問題を解決するために、テンプレート ディレクトリへのパスの交換に関連するすべてのロジックを削除しました。私の推測では、システムの python パスが変更されたときに、他の同時リクエストで間違った python パスのセットが表示されることがありました。

したがって、モバイル サイトと通常のサイトに、テンプレート ディレクトリへの同じパスへのアクセスを許可し、同じ名前の競合するテンプレートがないことを確認しました。

于 2011-03-30T15:44:15.787 に答える