缓存过时,即使我没有使用缓存

时间:2016-08-21 18:16:47

标签: django caching solr apache2 mod-wsgi

我已将我的Django网站上传到Digital Ocean的开发服务器上,并开始使用apache2和mod_wsgi提供服务。我也使用apache2来提供静态内容。它是服务器上Debian的全新安装,并且做了很少的更改。

我正在使用Django Haystack和Solr来支持全文搜索。我已经检查过数据库和Solr都是最新的。

现在,如果我用来检索页面的网址包含一个查询字符串(它可以小到?asd,其中asd不是一个有效的参数),一切都很好。

但是,如果它不包含这样的查询字符串,我会得到一个可能是几个小时(几天?)的页面版本,甚至包含我从数据库中删除的项目。

一旦我重新启动apache2,问题就解决了。

执行apache2ctl -M | grep cache不返回任何内容,settings.py也不引用缓存。任何人都知道这可能是什么原因?

更新:我的观点是标准搜索视图:

class SearchView(SearchView):
    form_class = ArticleSearchForm
    template_name = 'articles/index.html'
    paginate_by = 5

    def get_queryset(self):
        queryset = super(SearchView, self).get_queryset()
        return queryset

    def get_context_data(self, *args, **kwargs):
        context = super(SearchView, self).get_context_data(*args, **kwargs)
        context['ctx'] = context
        context['articles'] = map(lambda o: o.object, context['object_list'])
        return context

以及相关的搜索表单:

class ArticleSearchForm(SearchForm):
    start_date = forms.DateField(required=False, widget=forms.DateInput(attrs={ 'id': 'start_date', 'class': 'form-control' }))
    end_date = forms.DateField(required=False, widget=forms.DateInput(attrs={ 'id': 'end_date', 'class': 'form-control'}))

    def __init__(self, *args, **kwargs):
        super(ArticleSearchForm, self).__init__(*args, **kwargs)
        self.fields['q'].widget.attrs['class'] = 'form-control'

    def search(self):
        sqs = super(ArticleSearchForm, self).search()

        if not self.is_valid():
            return self.no_query_found()

        if not self.cleaned_data.get('q'):
            sqs = self.searchqueryset.all()

        if self.cleaned_data['start_date']:
            sqs = sqs.filter(pub_date__gte=self.cleaned_data['start_date'])

        if self.cleaned_data['end_date']:
            sqs = sqs.filter(pub_date__lte=self.cleaned_data['end_date']+datetime.timedelta(days=1))
        return sqs

但是考虑到我得到的页面与数据库中的内容不一致,我根本不认为我的代码会被调用。

更新2:它比这更怪异。 有时在我的浏览器上点击刷新后,我得到了正确的结果。几次再次刷新我再次得到不正确的结果。我尝试在服务器上搜索页面(通过localhost),我得到不正确的结果。

0 个答案:

没有答案