Tengo una vista en mi aplicación Django que crea automáticamente una imagen usando el PIL, la almacena en el servidor de medios Nginx y devuelve una plantilla html con una etiqueta img que apunta a su url.Django e imágenes generadas dinámicamente
Esto funciona bien, pero veo un problema. Por cada 5 veces que accedo a esta vista, en 1 de ellas la imagen no se procesa.
he hecho un poco de investigación y me encontré con algo interesante, este es el encabezado de respuesta HTTP cuando la imagen se muestre correctamente:
Accept-Ranges:bytes
Connection:keep-alive
Content-Length:14966
Content-Type:image/jpeg
Date:Wed, 18 Aug 2010 15:36:16 GMT
Last-Modified:Wed, 18 Aug 2010 15:36:16 GMT
Server:nginx/0.5.33
y esta es la cabecera cuando la imagen no se carga:
Accept-Ranges:bytes
Connection:keep-alive
Content-Length:0
Content-Type:image/jpeg
Date:Wed, 18 Aug 2010 15:37:47 GMT
Last-Modified:Wed, 18 Aug 2010 15:37:46 GMT
Server:nginx/0.5.33
Observe que Content-Lenth es igual a cero. ¿Qué pudo haber causado esto? ¿Alguna idea sobre cómo podría depurar aún más este problema?
Editar: Cuando se invoca la vista, llama a este método "dibujar" del modelo. Esto es básicamente lo que hace (me quita la mayor parte del código para mayor claridad):
def draw(self):
# Open/Creates a file
if not self.image:
(fd, self.image) = tempfile.mkstemp(dir=settings.IMAGE_PATH, suffix=".jpeg")
fd2 = os.fdopen(fd, "wb")
else:
fd2 = open(os.path.join(settings.SITE_ROOT, self.image), "wb")
# Creates a PIL Image
im = Image.new(mode, (width, height))
# Do some drawing
.....
# Saves
im = im.resize((self.get_size_site(self.width),
self.get_size_site(self.height)))
im.save(fd2, "JPEG")
fd2.close()
Edit2: Este es el sitio web: http://xxxcnn7979.hospedagemdesites.ws:8000/cartao/99/
si se mantiene golpear F5 la imagen de la derecha se eventualmente render.
Cuando el contenido de longitud es cero, se puede saber si la imagen se generó correctamente y existe en el servidor? –
Sí, se generó correctamente, cuando intenta acceder a la url de la imagen directamente se abre. –
¿Por qué anexa y varía la cadena de consulta get? –