2012-05-22 6 views
5

używam django-haystack i Whoosh na mój serwer Ubuntu i stwierdzeniu, że pewne zapytań tylko podnieść stronę błędu, a ja nie mam pojęcia, dlaczego tak się dzieje ...Django Haystack błędy losowe wykorzystujące Whoosh

używam następujące te

Whoosh==2.4.0 
django-haystack==1.2.7 

I również uruchomić python manage.py update_index raz na godzinę

Przykład traceback

Traceback (most recent call last): 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/newrelic-1.2.0.246/newrelic/hooks/framework_django.py", line 430, in __call__ 
    return self.__wrapped(*args, **kwargs) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/haystack/views.py", line 50, in __call__ 
    return self.create_response() 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/haystack/views.py", line 145, in create_response 
    return render_to_response(self.template, context, context_instance=self.context_class(self.request)) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/shortcuts/__init__.py", line 20, in render_to_response 
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/loader.py", line 188, in render_to_string 
    return t.render(context_instance) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 123, in render 
    return self._render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/newrelic-1.2.0.246/newrelic/api/function_trace.py", line 82, in __call__ 
    return self._nr_next_object(*args, **kwargs) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 117, in _render 
    return self.nodelist.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 744, in render 
    bits.append(self.render_node(node, context)) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 757, in render_node 
    return node.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 127, in render 
    return compiled_parent._render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/newrelic-1.2.0.246/newrelic/api/function_trace.py", line 82, in __call__ 
    return self._nr_next_object(*args, **kwargs) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 117, in _render 
    return self.nodelist.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 744, in render 
    bits.append(self.render_node(node, context)) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 757, in render_node 
    return node.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/newrelic-1.2.0.246/newrelic/hooks/framework_django.py", line 622, in __call__ 
    return self.__wrapped(*args, **kwargs) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 64, in render 
    result = block.nodelist.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 744, in render 
    bits.append(self.render_node(node, context)) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 757, in render_node 
    return node.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/defaulttags.py", line 311, in render 
    return self.nodelist_true.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 744, in render 
    bits.append(self.render_node(node, context)) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 757, in render_node 
    return node.render(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/defaulttags.py", line 227, in render 
    nodelist.append(node.render(context)) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 915, in render 
    resolved_vars = [var.resolve(context) for var in self.vars_to_resolve] 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 653, in resolve 
    value = self._resolve_lookup(context) 

File "/home/fundedbyme/.virtualenvs/fundedbyme/local/lib/python2.7/site-packages/django/template/base.py", line 692, in _resolve_lookup 
    raise VariableDoesNotExist("Failed lookup for key [%s] in %r", (bit, current)) # missing attribute 

VariableDoesNotExist: Failed lookup for key [object] in u'None' 


<WSGIRequest 
GET:<QueryDict: {u'q': [u'stockholm']}>, 
+2

Zauważyłem to samo zachowanie działające przeciwko Xapian, więc nie sądzę, że jest związany z backendem. Najprawdopodobniej używasz znacznika 'highlight', ponieważ jest źle zaprojektowany i podnosi ten rozwarty wyjątek, gdy' result' to 'None'. Dlaczego 'result' jest' None' jest zupełnie innym pytaniem. Czuje się jak błąd. –

+0

@ChrisPratt dziękuję za odpowiedź, obecnie nie używam znacznika highlight, ale uważam, że to frustrujące, że inni ludzie mają takie problemy i bardzo niewiele wiedzą, jak to naprawić ... – ApPeL

Odpowiedz

0

Czy możesz podać tutaj swój widok i swój kod szablonu? Jeśli dzieje się tak tylko w przypadku niektórych zapytań, a nie wszystkich, może to być parametr przekazywany do widoku. Oto kod z widoku używam do zapytań z wykorzystaniem Haystack 2.0 oraz Whoosh 2.3.2 w projekcie własną rękę:

def search(request): 
    sqs = SearchQuerySet().filter(content=AutoQuery(request.GET['q'])) 
return render_to_response('search.html', {'sqs': sqs,}) 

i to działa perfekcyjnie. Sądzę, że powinieneś rozważyć użycie najnowszej wersji Haystacka, ponieważ doświadczałem wielu błędów w starych stabilnych. I na wszelki wypadek polecam używanie "rebuild_index".

+0

Nie można mówić za OP, ale przynajmniej w moim przypadku: używam widoku wyszukiwania dostarczanego przez Haystack, więc nie ma tam dostosowania. Uciekam od głównej gałęzi Haystacka, a zadanie cron aktualizuje indeks co godzinę. Ale dzięki za odpowiedź. Tak jak powiedziałem, nie mogę mówić za OP, więc może twoja rada okaże się przydatna dla nich. –

Powiązane problemy