2010-05-28 4 views
1

Django 사이트의 자동 사이트 맵은 URL을 www로 포함시키는 것에서 벗어나 (나는 항상 그걸 가지고 가려고합니다) 변동합니다. 이것은 내 문제를 일으킬 수있는 것을 좁히려 고 노력하고 있으므로 내 페이지를 올바르게 색인하지 않는 Google에 파문을 일으 킵니다.Django sitemap intermittent www

나는 PREPEND_WWW = True으로 설정했으며 사이트 프레임 워크의 내 사이트 레코드에는 www가 포함되도록 설정되어 있습니다. example.com이 아니라 www.example.com으로 설정됩니다. 나는 memcached를 사용하고 있지만 페이지가 48 시간 후에 캐시에서 만료되어야 문제를 일으킬 것이라고 생각하지 않았을 것입니다.

http://www.livingspaceltd.co.uk/sitemap.xml (페이지를 몇 번 새로 고침)에서 문제를 확인할 수 있습니다.

내 사이트 맵 설치 그래서 나는 그 문제가 있음을 의심 해요,하지만 경우에 그것은 분명 뭔가 상당히 산문이다 내가 여기없는 코드입니다 해요 :

***urls.py*** 

sitemaps = { 
    'subpages': Subpages_Sitemap, 
    'standalone_pages': Standalone_Sitemap, 
    'categories': Categories_Sitemap, 
} 

urlpatterns = patterns('', 
    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), 
    ... 

***sitemaps.py*** 

# -*- coding: utf-8 -*- 
from django_ls.livingspace.models import Page, Category, Standalone_Page, Subpage 
from django.contrib.sitemaps import Sitemap 

class Subpages_Sitemap(Sitemap): 
    changefreq = "monthly" 
    priority = 0.4 
    def items(self): 
     return Subpage.objects.filter(restricted_to__isnull=True) 

class Standalone_Sitemap(Sitemap): 
    changefreq = "weekly" 
    priority = 1 
    def items(self): 
     return Standalone_Page.objects.all() 

class Categories_Sitemap(Sitemap): 
    changefreq = "weekly" 
    priority = 0.7 
    def items(self): 
     return Category.objects.all() 

답변

0

설정에서 PREPEND_WWW = True는 캐싱 변수 설정보다 위에 있어야합니다. 이것은 너와 똑같은 내 문제를 고쳤다. Google 웹 마스터 도구에서 사이트 맵을 제출할 때도 이와 동일한 문제가 발생했습니다.

+0

흠, 흥미 롭습니다. 솔직히 캐싱을 수동으로 다시 시작했을 때 내가 스스로 해결 한 문제가 있습니다. 나는 이것이 더 나은 해결책인지보기 위해 문제를 겪고있는 동시에 이것을 시도하는 데 관심이 있었을 것이다. 그러나 추가 문제를 방지하기 위해 제안한 변경 사항을 적용했습니다. 감사! –

0

것은 그것은 이상한 문제 중 하나가 될 수있다 나는 본 적이. 그러나 장고가 사이트 맵에서 URL을 만드는 방법은 매우 간단합니다. 그냥 데이터베이스에서 curent 사이트 개체를 가져옵니다 페이지의 상대적 위치에 "도메인"필드의 값을 추가합니다 : 당신은 당신이 데이터베이스 수준에서 이상한 아무것도 안하고 있는지

current_site = Site.objects.get_current() 
... 
loc = "http://%s%s" % (current_site.domain, self.__get('location', item)) 

(source)

있습니까? 미러링 된 데이터베이스가 여러 개 있지만 일관성이없는 경우 유사한 결과가 발생할 수 있습니다. Site.objects.get_current()을 표시하는 테스트 뷰를 설정해보십시오. 아마 또한 변동될 것입니다.

제 3 자 캐싱 앱 (예 : Johnny Cache)을 사용하는 경우 사용을 중지하십시오.

또한 사이트 개체가 하나도없고 www가없는 사이트 개체가 있는지 확인하십시오 (비슷한 효과를 나타내지 않아도되지만 여러 개의 SITE_ID에 대해 구성된 여러 서버 인스턴스가있을 수 있습니다 ... 어쩌면)?)

+0

답장을 보내 주셔서 감사합니다. Ludwik ... 나는 여러 dbs로 멋진 것을하지 않으며 사이트 개체는 하나뿐입니다. 나는 껍질을 사용하여'Site.objects.get_current()'를 사용해 보았는데, 꼭 www와 함께 그것을 돌려 보낸다. 테스트 뷰를 설정하여 다른 점이 있는지 확인하고, 캐싱을 완전히 중단하는 방법을 제안합니다. 주말 이후에 사무실에있을 때도 마찬가지입니다. –

+0

좋아요, 나는 캐싱을 완전히 꺼버 렸습니다. 아무 소용이 없습니다. 필자는 http://www.livingspaceltd.co.uk/url-test/에서'Site.objects.get_current()'를 출력하는 테스트 페이지도 설정했다. www가 끊임없이 있어야하기 때문에 항상 존재한다. 나는 원래의 질문을 편집하여 거기에 뭔가있는 경우를 대비해 사이트 맵 코드를 포함시킵니다. –

+0

도움을 주신 Ludwik에게 감사드립니다. 문제의 범위를 좁히는 데 도움이되었습니다. –

0

글쎄, 결국 캐싱 오류 인 것처럼 보입니다. 1 주일 전에 변경 사항을 작성한 것처럼 잘못되었다는 것이 확실하지 않습니다. 따라서 올바르게 작동하지 않았으며, 그것을 다시 시작하는 몇 가지 다른 방법을 시도해보십시오. 그래서 좀 더 심도있는 조사가 이루어 지지만 지금은 효과가 있습니다.