2011-02-19 5 views
0

비커 캐시가 유형 오류를 발생시킵니다. Google에서 검색했으며 심지어 비커의 문제 추적기를 추적했지만 아무 것도 찾을 수 없었습니다. 비커 캐시가 유형 오류를 발생합니다.

나는이 프로그램을 실행할 때,이 내가받을 것입니다 다음과 같은 방법 그러나

@staticmethod 
def get_queries(query): 
    @cache.cache(query, type = 'file', expire = 300) 
    def load(query): 
     entries = db.get_expensive_query(query) 
     return entries 
    return load(query) 

같은 쿼리를 캐시;

File "/Users/ivan/project/controller/caching.py", line 15, in get_queries 
     return load(query) 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 417, in cached 
    return cache[0].get_value(cache_key, createfunc=go) 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 214, in get 
    return self._get_value(key, **kw).get_value() 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 256, in get_value 
    if not self._is_expired(stored, expired): 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 245, in _is_expired 
    time.time() >= expiretime + storedtime 
TypeError: cannot concatenate 'str' and 'float' objects 

내가 잘못 했나요? 아니면 비커의 버그입니까?

답변

0

당신의 코드는 만료를위한 정수를 가진 cache.cache를 호출합니다. 이것은 정확 합니다만, 분명히 expiretime 또는 storedtime이 문자열로 감겨 있습니다. [오류 메시지에서 만료되어야합니다. --ed] 여기에 내가 무슨 일이 일어 났을까 :

(1) 어떤 시점에서 문자열 만료 된 cache.cache를 호출했습니다. [CacheManager opts의 기본 cache.expire 에서조차 확실하지 않을 수 있습니다.]

(2) 버그를 수정하여 제출 한 코드를 생성했습니다 (저에게 효과적입니다).

(3) 캐시 디렉토리을 삭제하지 않고 코드를 다시 작성하면 어떻게 든 이전 상태를 선택합니다.

위의 처방에 따라 실수를 재현 할 수 있습니다. 캐시 (cache.data_dir 및 cache.lock_dir의 모든 항목)를 삭제하고 다시 시도해 주시겠습니까?

+0

귀하의 첫 번째 추측이 맞았습니다. 귀하의 의견을 읽었을 때 코드를 더 신중하게 수정하여 문제점을 발견했습니다. 고맙습니다! – Ivan

관련 문제