4

djangoのWebサイトでjohnnyキャッシュをインストールしようとしています。

だから私はこのようにすべてのジョニーキャッシュ関連の設定を設定しました:

CACHES = {
  'default': {
    # 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',                                                                                                        
    'LOCATION': '127.0.0.1:11211',
    'BACKEND': 'johnny.backends.memcached.MemcachedCache',
    'JOHNNY_CACHE': True,
  }
}

これまでのところ、プロジェクト全体はまだ本番モードで適切に実行されています。'johnny.middleware.LocalStoreClearMiddleware'しかし、ミドルウェアをセットアップした直後に 'johnny.middleware.QueryCacheMiddleware'、次の例外が発生します。

Environment:

Request Method: GET
Django Version: 1.3.1
Python Version: 2.6.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'core_knowledge_platform.core_web_service',
 'south']
Installed Middleware:
('johnny.middleware.LocalStoreClearMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'johnny.middleware.QueryCacheMiddleware')


Traceback:
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
  117.                             response = middleware_method(request, e)
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/u1/msc/vg55/public_html/core_knowledge_web_platform/core_knowledge_platform/core_web_service/views.py" in __call__
  95.         return getattr(self, method)(request, *args, **kwargs)
File "/u1/msc/vg55/public_html/core_knowledge_web_platform/core_knowledge_platform/core_web_service/views.py" in GET
  673.             if not access.validate_user_is_editor(request.user):
File "/u1/msc/vg55/public_html/core_knowledge_web_platform/core_knowledge_platform/core_web_service/business_logic/access.py" in validate_user_is_editor
  38.     if papergroups:
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in __nonzero__
  113.             iter(self).next()
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in _result_iter
  107.                 self._fill_cache()
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in _fill_cache
  772.                     self._result_cache.append(self._iter.next())
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in iterator
  273.         for row in compiler.results_iter():
File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py" in results_iter
  698.                     row = self.resolve_columns(row, fields)
File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/compiler.py" in resolve_columns
  12.         return row[:index_extra_select] + tuple(values)

Exception Type: TypeError at /publication/
Exception Value: cannot concatenate 'str' and 'tuple' objects

注意:ドキュメントに役に立たないと記載されているため、ジョニーキャッシュはINSTALLED_APPSに設定されていません

編集

さて、キャッシュヒットがあった場合にのみ例外がスローされることを発見しました。memcachedに保存されている値の有効期限が切れるのを待ってから、ページの読み込み時に例外がスローされません...

問題にさらに影を加えるために、ローカルホストでjohnnyをアクティブにしてプロジェクト全体を実行すると、すべてがうまくいきます。しかし、prod環境(Apache / 2.2.15(CentOS))で実行すると、例外がスローされます...そして両方の環境のdjangoバージョンはまったく同じです:1.3.1

注意:okmで指定されたミドルウェアの注文を設定しました

ありがとうございました

4

2 に答える 2

1

私はまったく同じ問題を抱えています。私はまだそれの正確な底に到達しようとしていますが、私はいくつかの有用なものを見つけました。

  1. 古いバージョンのjohnnyキャッシュは機能します。マスター/スレーブのセットアップが必要なので、このフォークを使用しました:https ://bitbucket.org/skoczen/johnny-cache 11月までのコミットのみが含まれているため、その後問題が発生します。

  2. 管理ページでは、エラーはauth_userおよびauth_tableテーブルキャッシュが原因で発生します。これらをJOHNNY_BLACKLISTに追加すると、問題が回避され、これらのテーブルのキャッシュも無効になります。この問題がこれらのテーブルに固有のものであるとは思えないため、これらのテーブルをブラックリストに登録することは適切な解決策ではありません。

私は自分の構成を確認し、あなたと同じように多くのことを試しましたが、それは問題ではありません。

お役に立てれば。

編集:さらに掘り下げると、このコミットbcdb46c5d357で問題が発生することが明らかになりました。これにより、nullを返すキャッシュクエリにコードが追加されました:https ://bitbucket.org/jmoiron/johnny-cache/changeset/bcdb46c5d357

以前のものに固執する場合、それは機能するはずです。

于 2012-04-18T20:44:36.293 に答える
0

次に、ミドルウェアの順序がエラーの原因である可能性があります。試してみてください

'johnny.middleware.LocalStoreClearMiddleware',
'johnny.middleware.QueryCacheMiddleware', # Here
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',    
# Probably you need this for transaction, later
# 'johnny.middleware.CommittingTransactionMiddleware',

'johnny.middleware.QueryCacheMiddleware'初期化する必要があるため、他のミドルウェアの前に配置する必要があります。'johnny.middleware.LocalStoreClearMiddleware'応答と例外のみを処理するため、これが最初になる可能性があります。

于 2012-04-10T16:32:33.517 に答える