it-swarm-es.com

Implementar cambios complejos

Ocasionalmente, necesitamos implementar cambios bastante complejos en un sitio web que requieran cambios en bases de datos (tablas nuevas o modificadas) y código fuente dinámico (como PHP o ColdFusion). ¿Cuál es la mejor manera de empaquetar e implementar estos cambios rápidamente sin romper todo en el sitio web en vivo?

4
Justin Scott

Respuesta corta: ¡es un dolor en el cuello!

He tenido que hacer esto varias veces (y cada vez me dan ganas de pensar más en mi diseño en el próximo proyecto que haga). Lo que hago es bifurcar la base de código a una sección de Desarrollo (o carpeta, o servidor, etc.) para que pueda trabajar en ella por separado para asegurarme de que todos los errores estén eliminados antes de pasar a la implementación. Luego creo un script SQL que siempre tiene las mismas dos primeras líneas:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Esto asegurará que el script ponga todo en una base de datos completamente nueva y vacía. El resto del script recreará todas las tablas que estoy reutilizando de la base de datos anterior a la nueva. Luego crearé las tablas nuevas (o modificadas) en la nueva base de datos. Finalmente, moveré todos los datos del servidor en vivo al servidor de desarrollo. Esto puede llevar mucho tiempo dependiendo de la cantidad de datos que esté moviendo y qué tan rápido pueda moverlos, por lo que le recomiendo que piense detenidamente en el script porque cuanto menos se vea obligado a ejecutarlo, mejor.

Después de tener la nueva base de datos de desarrollo en funcionamiento, el resto es crear el nuevo código para usarla. Una vez que esto se solucione, la implementación debería ser relativamente fácil (aunque posiblemente requiera mucho tiempo). Simplemente use el mismo script para copiar todos los nuevos datos en vivo a la nueva base de datos en el servidor de implementación, y copie todo el código nuevo allí, ¡y listo!

Así es como lo hago, y aunque es un dolor, funciona. Si hay una mejor manera, estaría encantado de escuchar.

Actualización: En respuesta al comentario de Tchalvak, sí, generalmente uso lo siguiente para obtener todas las definiciones de tabla sin sus datos reales:

mysqldump --databases --no-data databaseName > newScript.sql

Luego alteraré este script como se describió anteriormente.

3
Mike

Para obtener "la capacidad de retroceder", realmente sugiero conocer (bien) git o Mercurial(sistemas de control de versiones distribuidas) .

Se acabaron los días en que debería trabajar con su código fuente en archivos planos (ahora debe trabajar con él en archivos planos pero tener un sistema de control de cambios realmente robusto que los rastree).

2
Kzqai

Generalmente lo hago (para los sitios de estilo LAMP):

  1. defina sus cambios luego escriba un script para aplicarlos (uso un Makefile).
  2. Prueba sus cambios en una muestra de datos que representa el entorno real
  3. Prueba nuevamente para asegurarse
  4. Date una salida, tienes la capacidad de retroceder

Si está ejecutando un clúster, es posible que tenga mayores dolores de cabeza con el estado del sitio, las memorias caché, etc.

0
Aiden Bell