У меня странная проблема - надеюсь, кто-то уже сталкивался с подобной проблемой.
Я пытаюсь кэшировать содержимое из разных поддоменов, подключенных через подстановочный знак к моему приложению django «example.com».
Итак, когда я доберусь до subdomain1.example.com. я запускаю код, отличный от example.com - простое промежуточное программное обеспечение для этого, например здесь: для субдоменов
Что-то идет не так, когда я одновременно обновляю страницы из разных доменов (например, используя другой браузер вкладок). В результате выводится последняя обновленная страница. И такое поведение не зависит от IP (если кто-то еще переходит на какой-то другой поддомен в то же время, когда вы входите на главную страницу, вы получите контент этого поддомена).
Если я сначала жду загрузки страницы, то я перехожу к другим, все загружается правильно: |
Если я отключу кеширование, проблемы не будет.
Моя мягкая спецификация:
- Убунту 8.04 ЛТС
- Apache + mod-wsgi
- threads 10 processes not defined multiprocess=false
- Джанго 1.23
- серверная часть кэширования файлов
ПРОМЕЖУТОЧНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ:
class Subdomains:
def process_request(self, request):
u'''
przekierowuje na stronę główną, jeżeli subdomena z której weszliśmy nie jest subdomeną miasta znajdującego się w bazie. Oraz ustawia zmienną request.META['city']!
'''
city = get_city_from_host(request.get_host())
request.city=None
if city:
try:
city = City.objects.filter(slug__exact=city)
request.city=city[0].slug
except:
return HttpResponsePermanentRedirect(ROOT_URL)
ПОСМОТРЕТЬ:
def post_data(request,address,id):
url_root = settings.ROOT_URL
city_subdomain = request.city
if city_subdomain:
random_posts = Post.objects.filter(city__slug=city_subdomain).order_by('?')
if random_posts.count() <= 10:
pass
else:
random_posts = random_posts[:10]
city = City.objects.filter(slug__exact = city_subdomain)[0]
try:
post = Post.objects.get(id = int(id), city__slug__exact=city.slug)
nearestinposts = post.nearestinpost_set.select_related(depth=2).all()
return render_to_response('post_data.html', locals())
except:
return HttpResponsePermanentRedirect('http://%s.%s/' % (city_subdomain, settings.ROOT_URL))
return HttpResponsePermanentRedirect('http://%s' % settings.ROOT_URL)
НАСТРОЙКИ.PY
CACHE_BACKEND = 'file://%s/cache/' % PROJECT_DIR
CACHE_MIDDLEWARE_SECONDS = 6000
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'middleware.default.Subdomains',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
Чтобы изменить CACHE_KEY, я использую хак: кэширование Django для поддоменов