2010-08-06 17 views
9

Ahora estoy usando git para la implementación de Django, lo que me parece satisfactorio. Mi único problema sigue siendo cómo manejar los datos en la base de datos correctamente. P.ej. A menudo necesito editar los datos provenientes del sitio de producción localmente y volver a poner los datos en el sitio de producción (¡tenga en cuenta que estoy hablando de cambios de datos y no de migraciones de esquemas!). Creo que el flujo de trabajo debe ser similar a lo siguiente: Volcar datos en el sitio de producción> descargar datos> cargar datos en db> realizar cambios localmente> volcar datos> crear diferencias para datos> cargar diff & aplicar cambios en el sitio de producción.Despliegue de Django: Manejo de datos en la base de datos

Para mí es importante sería que esto también funciona para los cambios en las filas de bases de datos existentes, supresiones, etc ...

Así que si comienzo a experimentar con el que por mi cuenta: 1. ¿Funcionará con cualquiera de las ofertas de formato de volcado de datos? 2. ¿Alguien más trabaja de esa manera, tal vez ya tenga algunas soluciones de script (de tela) listas para eso?

+2

¿Existe la posibilidad de que los datos que modifica localmente se modifiquen en el servidor al mismo tiempo? ¿Puedes crear una interfaz que te permita editar los datos directamente en el servidor de producción? –

Respuesta

6

Las tablas que deseo volcar/cambiar/restaurar son bastante pequeñas y son de solo lectura a través de la interfaz pública. El siguiente método se utiliza:

  1. Los datos se vuelcan con el comando dumpdata ./manage.py en el servidor.
  2. A continuación, el archivo de resultados se compromete a VCS en el servidor.
  3. Extraigo los cambios y ejecuto ./manage.py loaddata.
  4. Después de realizar los cambios ./manage dumpdata se ejecuta localmente.
  5. El archivo de resultados se compromete a VCS y empujado hacia atrás con el servidor
  6. comando ./manage loaddata se ejecuta en el servidor

Esto puede ser automatizado con la tela, por ejemplo

1 + 2 + 3 = fab dump_data:cities, 4 + 5 + 6 = fab push_data:cities

Diffs se producen internamente por VCS. Este enfoque no funcionará para todo, pero lo encontré útil para casos simples.

+0

¿Así que también está fusionando los datos volcados (JSON) con el VCS sin ningún problema? Estoy buscando un enfoque que me permita, por ejemplo. ¿Empujar los datos cambiados en el servidor cuando mientras tanto los cambios también se hacen en el sistema de producción? Creo que, en teoría, la fusión de los datos de JSON debería funcionar. ¡Solo tengo curiosidad si alguien lo está manejando así! –

+0

No probé esto porque mis tablas cambian raramente. Pero puede funcionar realmente: volcar y comprometer y tirar y fusionar nuevamente antes de impulsar cambios locales. –

2

1) Entiendo que no está hablando de la migración de esquemas. Sin embargo, hay una migración de datos . He usado South para hacer el tipo de cambios en los datos de producción que ha descrito. Puede valer la pena investigarlo.

2) En mi humilde opinión aplicar una diferencia no es la mejor manera de modificar volcados de base de datos. Diff y merge son más aplicables al código fuente/texto que a los volcados de bases de datos. Dicho esto, tengo curiosidad por saber si alguien ha realizado con éxito diff/patch/merge en los volcados de bases de datos.

+0

1) Sí, estoy usando South para migraciones de esquema, encontré que es un poco desagradable para los datos. 2) Bueno, ese es exactamente mi punto, nunca lo intenté, pero teniendo curiosidad si un diff funcionaría con json/xml ¡cualquiera que sea el volcado! (por supuesto, no con sql). Y "diff" quizás no solo en el sentido de Unix :) –

+0

2) Creo que hay herramientas disponibles para diffs XML y tal. Nunca los usé sin embargo. ¡Publica aquí si descubres algo que funciona! –

1

Si el back-end de su base de datos es SQL Server, Red-Gate tiene una herramienta de comparación de datos que puede usar. Sin embargo, no estoy seguro de qué herramientas están disponibles fuera del mundo del Servidor SQl.

2

Si descarga> modificar> cargar un volcado completo, tiene que estar listo para la pérdida de datos. Cualquier dato que se cree/modifique durante la producción mientras descarga, modifica o carga datos modificados se perderá.

mejores prácticas para evitar que si se puede modificar datos en la base de datos de producción sería:

  1. crear secuencias de comandos SQL basado en las modificaciones locales y ejecutarlo en la base de datos de producción,
  2. crear vista de gestión de cambios de datos y ejecutarlo en el servidor web de producción

o, si no puede modificar los datos en la base de datos de producción:

  • crear volcado, descargar y cargar de forma local,
  • modificar los datos localmente,
  • crear vertedero local,
  • comparar volcado remoto con vertedero local y create volcado solamente contiene modificado/añadido registros,
  • ha subido y se carga

carga y carga parcial en este caso sería mucho más rápido pero te tiene que manejar deleciones de otra manera.

Cuestiones relacionadas