//barrabarra

JAVIER ROMERO
Programación web y escritorio
 

Si no se sirven los estáticos, seguramente es porque no hay aplicación para servir estáticos

septiembre 24, 2011 at 9:36 am | Blog, Django | No comment

 

Vamos con uno de esos problemas estúpidos que te hacen perder una cantidad de tiempo impresionante. Ahora mismo llevaba desde las 8 intentando resolver un problema relacionado con el estupendo FeinCMS y es que cuando cambiaba en settings.py el atributo DEBUG a False se producía un error 500 al intentar acceder a los archivos estáticos y me mostraba la plantilla estándar de error 500 de apache.

Casualmente, existía un problema con FeinCMS y mod_wsgi que hacía que se debieran realizar ciertos ajustes en servidores de producción al cambiar DEBUG = False y es a mensajes referentes a ese problema a los que he ido a parar primero, así que me he tirado buena parte del principio de la mañana probando a cambiar el orden de aplicaciones en INSTALLED_APPS, a precargar módulos en el urls.py base, a modificar el archivo de configuración de wsgi, y varias ocurrencias más, sin embargo, todo seguía igual: intentaba acceder a los estáticos y obtenía un error 500.

El problema realmente era que estaba viendo el error pero no me estaba parando a entenderlo. El error en cuestión era:

VariableDoesNotExist: Failed lookup for key [feincms_page] in (variables de entorno variadas)

Claro, hacía referencia a feincms_page y yo piqué y seguí buscando el error por ahí, pero el problema era más enrevesado.

Como estaba cansado de revisar los logs en el servidor, se me ocurrió que podía modificar la plantilla de errores 500 para que mostrara el error cada vez, y esto hizo que se me encendiese por fin la bombilla ¿por qué estaba viendo la plantilla por defecto de Apache si yo tenía una plantilla “bonita” para los errores 404 y 500? Abrí las plantillas y ahí estaba la primera parte del problema: estaba extendiendo otra plantilla que usaba un templatetag al que se le pasaba una variable feincms_page. Cambié la plantilla de base y ahora sí aparecían mis plantillas de error.

Pero seguía siendo extraño. Ahora no recibía un error 500, sino un 404 cuando intentaba acceder a los estáticos. ¿Estamos locos ahora o qué? Si los estáticos no los debería servir Apache sino NGINX O_o?
A revisar la configuración del settings para MEDIA_URL, STATIC_URL y ADMIN_MEDIA_PREFIX (extrañamente, media y admin funcionaban correctamente). Pues no, todo está bien. Vamos a ver TEMPLATE_CONTEXT a ver si he incluído ‘django.core.context_processors.static'; sí, si que está.

Ya no se me ocurría qué más hacer. Rastreé por el servidor a ver si las carpetas y enlaces simbólicos estaban bien… todo correcto.
Por último decido ir al panel de control de Webfaction a ver si hay algún problema en cómo tengo configurada la web y ¡Zas! en toda la boca: no había añadido a la web la aplicación static ni la ruta desde la que se servía, por eso al intentar acceder a los estáticos me respondía Apache y no intentaba servir los estáticos, sino páginas del cms U_U.

Pongo la captura como ejemplo de configuración de sitio en Webfaction: una aplicación django + 3 aplicaciones symbolic_link a static content only que apuntan a los medios de django admin y a los estáticos y media propios de nuestro proyecto:

Así que:

  1. Revisar las plantillas más básicas, como la base.html y las de error si se muestran las páginas de error estándar de Apache en lugar de las tuyas.
  2. Revisar que se han creado todas las aplicaciones y que se han añadido todas con sus rutas a la web en el panel.
  3. Profit!


<< Volver al Blog Comentar la entrada

 
No hay comentarios en “Si no se sirven los estáticos, seguramente es porque no hay aplicación para servir estáticos”
Deja tu comentario

Categorias:

Archivo: