Foros del Web » Programando para Internet » Python »

Cache en servidor no funciona

Estas en el tema de Cache en servidor no funciona en el foro de Python en Foros del Web. Estoy usando en mi proyecto la cache en memoria local y probandola con el servidor de desarrollo (django-extensions no el predeterminado) no funciona la cache ...
  #1 (permalink)  
Antiguo 19/08/2012, 08:21
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años
Puntos: 1
Cache en servidor no funciona

Estoy usando en mi proyecto la cache en memoria local y probandola con el servidor de desarrollo (django-extensions no el predeterminado) no funciona la cache nunca recupera los valores de la cache (uso cache a bajo nivel), la prueba que hago es la siguente:

Código Python:
Ver original
  1. # Try get configuration of cache
  2.         configuration = cache.get('adverts_fly_conf_' + settings.SITE_ID)
  3.         if configuration == None:
  4.             # Get configuration
  5.             configuration = Site.objects.get(
  6.                 id=int(settings.SITE_ID)
  7.                 ).advertsflysiteconfiguration_set.get()
  8.             cache.set('adverts_fly_conf_' + settings.SITE_ID,
  9.                 configuration, 300)
  10.         else:
  11.             print 'cache ok'

Pues el "cache ok" nunca llega a ejecutarlo. Tengo la siguiente confiuracion e cache:

Código Python:
Ver original
  1. CACHE_MIDDLEWARE_KEY_PREFIX = 'SEW' + str(SITE_ID)
  2. CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
  3. CACHE_MIDDLEWARE_SECONDS = 86400
  4. CACHES = {
  5.     'default': {
  6.         'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
  7.         'LOCATION': 'unique-snowflake',
  8.         'TIMEOUT': 86400,
  9.         'OPTIONS': {
  10.             'MAX_ENTRIES': 1000
  11.         },
  12.         'KEY_PREFIX': 'SEW' + str(SITE_ID),
  13.         'VERSION': 1,
  14.     }
  15. }
  16.  
  17. MIDDLEWARE_CLASSES = (
  18.     'sew.middleware.DynamicSites.SetDynamicSites',
  19.     'django.middleware.cache.UpdateCacheMiddleware',
  20.     'django.middleware.common.CommonMiddleware',
  21.     'django.middleware.gzip.GZipMiddleware',
  22.     'adverts_fly.middleware.adverts.ChangeLinks',
  23.     'django.contrib.sessions.middleware.SessionMiddleware',
  24.     'django.contrib.auth.middleware.AuthenticationMiddleware',
  25.     'django.middleware.csrf.CsrfViewMiddleware',
  26.     'django.contrib.messages.middleware.MessageMiddleware',
  27.     # Uncomment the next line for simple clickjacking protection:
  28.     # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  29.     'django.middleware.cache.FetchFromCacheMiddleware',
  30. )

Y aunque creo que al usar lacache a bajo nivel no deberia afectar, he probado estando sin acceder, como usuario anonimo.
__________________
JHG
  #2 (permalink)  
Antiguo 19/08/2012, 15:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Cache en servidor no funciona

De casualidad settings.SITE_ID es cero?
  #3 (permalink)  
Antiguo 19/08/2012, 16:55
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años
Puntos: 1
Respuesta: Cache en servidor no funciona

Imposible, en el peor de los casos es 1 de forma pedeterminada. El SITE_ID cambia dinamicamente al id del objeto site del dominio que haya sido pedido (empieza en 1 y es incremental) o vale 1 por defecto. Hice mi propio middleware para esto.

EDITO: pruebo la cache desde la shell plus y funciona bien, no entiendo porque en el servidor de desarrollo no funciona.

EDITO para poner el código del middleware del SITE_ID:

En settings.py
Código Python:
Ver original
  1. from sew.middleware.DynamicSites import DynamicSiteId, SITE_THREAD_INFO
  2.  
  3.  
  4. # ID de sitio dinamico segun peticiones
  5. SITE_ID = DynamicSiteId()

En DynamicSites.py
Código Python:
Ver original
  1. #-*- coding: UTF-8 -*-
  2. """ For use middleware: <app>.middleware.DynamicSites.SetDynamicSites
  3. from <app>.middleware.DynamicSites import DynamicSiteId, SITE_THREAD_INFO
  4. SITE_ID = DynamicSiteId()
  5. MEDIA_URL_DIR = '/cargas/'
  6. STATIC_URL_DIR = '/estaticos/' """
  7. from threading import local
  8. from django.conf import settings
  9. from django.contrib.sites.models import Site
  10. import re
  11.  
  12.  
  13. class SetDynamicSites(object):
  14.     """ Change SITE_ID dinamics. """
  15.     def process_request(self, request):
  16.         try:
  17.             current_site = Site.objects.get(domain=request.get_host())
  18.             settings.SITE_ID._set(current_site.id)
  19.             settings.MEDIA_URL = '//' + request.get_host() + \
  20.                 settings.MEDIA_URL_DIR
  21.             settings.STATIC_URL = '//' + request.get_host() + \
  22.                 settings.STATIC_URL_DIR
  23.             settings.HOST = request.get_host()
  24.         except:
  25.             settings.SITE_ID._set(1)
  26.         return None
  27.  
  28.  
  29. SITE_THREAD_INFO = local()
  30.  
  31.  
  32. class DynamicSiteId(object):
  33.     def __init__(self):
  34.         SITE_THREAD_INFO.SITE_ID = 1
  35.  
  36.     def __unicode__(self):
  37.         try:
  38.             return unicode(SITE_THREAD_INFO.SITE_ID)
  39.         except AttributeError:
  40.             SITE_THREAD_INFO.SITE_ID = 1
  41.             return unicode(SITE_THREAD_INFO.SITE_ID)
  42.  
  43.     def __str__(self):
  44.         try:
  45.             return str(SITE_THREAD_INFO.SITE_ID)
  46.         except AttributeError:
  47.             SITE_THREAD_INFO.SITE_ID = 1
  48.             return str(SITE_THREAD_INFO.SITE_ID)
  49.  
  50.     def __hash__(self):
  51.         try:
  52.             return SITE_THREAD_INFO.SITE_ID
  53.         except AttributeError:
  54.             SITE_THREAD_INFO.SITE_ID = 1
  55.             return SITE_THREAD_INFO.SITE_ID
  56.  
  57.     def __int__(self):
  58.         try:
  59.             return SITE_THREAD_INFO.SITE_ID
  60.         except AttributeError:
  61.             SITE_THREAD_INFO.SITE_ID = 1
  62.             return SITE_THREAD_INFO.SITE_ID
  63.  
  64.     def _set(self, value):
  65.         SITE_THREAD_INFO.SITE_ID = int(value)
__________________
JHG

Última edición por jhg; 19/08/2012 a las 17:17 Razón: Añadir información adicional

Etiquetas: cache, django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:56.