2012-04-10 8 views
4

私はdjangoのウェブサイトでjohnnyキャッシュをインストールしようとしています。'str'と 'tuple'オブジェクトを連結できません - Django - johnny cache

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

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

これまでのところ、全体のプロジェクトは、まだ本番モードで正常に実行されます。

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 

NB:ドキュメントは、それは無用だと言うとジョニー・キャッシュがINSTALLED_APPSに設定されていない

EDIT

しかし、すぐミドルウェア 'johnny.middleware.LocalStoreClearMiddleware''johnny.middleware.QueryCacheMiddleware'私は、次の例外を取得し設定した後

さて、私は、キャッシュヒットが発生した場合にのみ例外がスローされることを発見しました。 memcachedに保存されている値が期限切れになるのを待っているときに、ページの読み込み中に例外がスローされない...

問題をシャドウに追加するには、localhostでjohnnyを有効にして、すべてがうまくいく。しかし、私はそれをprod環境(Apache/2.2.15(CentOS))で実行すると例外がスローされます... 両方の環境でのdjangoのバージョンはまったく同じです:1.3.1

NB: OKMで指定されたミドルウェアの順番を設定しまし

+0

johnnyのバージョンは?また、 '' Installed Middleware'に '' johnny.middleware.QueryCacheMiddleware ''はありません。 – okm

+0

レポの最後の1つです。インストールされたミドルウェアの下端に '' johnny.middleware.QueryCacheMiddleware ''があります。私はそれをそこに置くのが適切な場所だった、それは間違っているでしょうか? – renard

答えて

1

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

  1. 古いバージョンのjohnnyキャッシュが動作します。マスター/スレーブの設定が必要なので、私はこのフォークを使用しました:https://bitbucket.org/skoczen/johnny-cacheそれは11月までのコミットだけを含んでいるので、それ以降に問題が導入されます。

  2. 管理ページで、エラーはauth_userテーブルとauth_tableテーブルのキャッシュによって発生します。これらをJOHNNY_BLACKLISTに追加すると、問題が回避され、これらのテーブルのキャッシュも無効になります。問題はこれらのテーブルに固有のものではないので、私はそれらのテーブルをブラックリストに載せることは良い解決策ではありません。

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

これが役に立ちます。

編集:あなたは1以前に固執した場合、それが動作するはずhttps://bitbucket.org/jmoiron/johnny-cache/changeset/bcdb46c5d357

: より多くの掘削は、問題がnullを返すキャッシュクエリにコードを追加し、このコミットbcdb46c5d357、とまで作物ことを明らかにしました。

+0

私はあなたが言及したフォークを取ってきました。今はうまくいくようです。私はコードに飛び込み、何が間違っているのかを見つけようとしましたが、理解できませんでした。先端をありがとう – renard

+1

残念ながら、このフォークはDjango 1.4では動作しません – suda

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'を初期化する必要が試してみて、ありがとう他のmiの前にddlewares。 'johnny.middleware.LocalStoreClearMiddleware'はレスポンスと例外を処理するため、最初になる可能性があります。

+0

いいえ、何も変更されず、同じ例外がスローされます。 – renard

関連する問題