Tenemos un sitio web basado en Django para el que queríamos que parte del contenido (texto y lógica de negocios, como planes de precios) sea fácilmente editable internamente , por lo que decidimos almacenarlo fuera de la base de código. Por lo general, el motivo es uno de los siguientes:
Es algo que la gente no técnica quiere editar. Un ejemplo es la redacción de textos publicitarios para un sitio web: los programadores preparan una plantilla con el texto predeterminado "Lorem ipsum ...", y el contenido real se inserta más tarde en la base de datos.
Es algo que queremos poder cambiar rápidamente, sin la necesidad de implementar un nuevo código (que actualmente hacemos dos veces por semana). Un ejemplo serían las características actualmente disponibles para los clientes en diferentes niveles de precios. En lugar de codificarlos, los leemos de la base de datos.
La solución descrita es flexible, pero hay algunas razones por las que no me gusta.
Debido a que el contenido debe leerse desde la base de datos, hay una sobrecarga de rendimiento .
Mitigamos eso mediante el uso de un esquema de almacenamiento en caché, pero esto también agrega cierta complejidad al sistema.
Los desarrolladores que ejecutan el código localmente ven el sistema en un estado significativamente diferente en comparación con la forma en que se ejecuta en producción. Las pruebas automatizadas también ejercitan el sistema en un estado diferente. Situaciones como probar nuevas características en un servidor de ensayo también se vuelven más complicadas: si el servidor de ensayo no tiene una copia reciente de la base de datos, puede ser inesperadamente diferente de la producción.
Podríamos mitigar eso comprometiendo ocasionalmente el nuevo estado en el repositorio (por ejemplo, agregando migraciones de datos), pero parece un enfoque incorrecto. ¿Lo es?
¿Alguna idea de la mejor manera de resolver estos problemas? ¿Existe un mejor enfoque para manejar el contenido que estoy pasando por alto?
Respuestas:
Debería pensar en el contenido editable como una característica completa .
Pero, en lugar de hacer que el contenido sea editable, puede hacer que esa gente técnica forme parte de su flujo de desarrollo. En lugar de desarrollar -> desplegar -> alterar datos, puede modificar los datos -> desarrollar -> desplegar. Tal vez podría tomar prestadas algunas ideas de plataformas de blogs estáticos como Octopress .
fuente
Esta es una buena tarea para tus DevOps. :) Puedes hacer lo siguiente:
Es posible automatizar todo excepto la fusión con Chef o cualquier otra herramienta, por lo que esta solución puede ser cómoda tanto para usuarios, desarrolladores y SQA.
fuente
Tuvimos la misma situación. Terminamos usando las siguientes aplicaciones de Django:
No es perfecto, pero te brinda todo lo que necesitas:
Para que los desarrolladores experimenten las mismas páginas que en el sistema de producción, si ese es un requisito real, exporte desde la producción hasta el desarrollo y pruebe usando accesorios.
Conceptualmente, creo que estás en el camino correcto. Pregúntese si necesita implementar su propia solución, o si puede vivir con algún tipo de CMS. Flatpages es una versión muy simple de eso. CMS más sofisticados están disponibles.
fuente