2009-10-09 10 views
9

Actualmente utilizamos un repositorio SVN para garantizar que los entornos locales de todos estén actualizados. Sin embargo, el desarrollo del sitio web de Drupal es un poco más complicado ya que cualquier código personalizado que escriba (por ejemplo, código PHP escrito para un cuerpo de nodo) se almacena en el DB y los cambios no son reconocidos por la copia de trabajo del SVN.Cómo fusionar los cambios en la base de datos Drupal

Hay un par de desarrolladores que están trabajando actualmente en la misma área de un sitio de Drupal, pero no estamos seguros de cómo combinar mejor nuestros cambios de base de datos de Drupal locales. Los parches comprometidos de volcados de bases de datos parecen torpes en el mejor de los casos y es muy probable que sean ineficientes y propensos a errores para este propósito.

¡Se agradece cualquier sugerencia sobre cómo abordar este problema!

Respuesta

5

Desafortunadamente, la implementación/actualización de la base de datos es uno de los puntos débiles de Drupals. Consulte this question & answers y this one para obtener algunas sugerencias sobre cómo solucionarlo.

En cuanto a CCK, puede encontrar algunas sugerencias here.

En cuanto al código php en el contenido, estoy de acuerdo con googletorp en que debe evitar hacer esto. Sin embargo, si por alguna razón tienes que hacerlo, puedes intentar reducir el código a una llamada a función simple. Por lo tanto, tendría la función en sí misma en un módulo (y esto se rastrearía a través de SVN). Pero de todos modos está a un paso de eliminar la necesidad del código en línea de todos modos ...

1

Al comprometer parches de volcados de bases de datos, ¿quiere decir tomar un extracto completo de la base de datos y confirmarlo después de cada cambio?

¿Qué tal una copia maestra de la base de datos? Extraiga todas las tablas, vistas, sps, etc ... en archivos individuales, colóquelos en svn y realice las ediciones de fusión en los objetos individuales.

+0

Sí, quería decir tomar extracto de toda de la base de datos. El resultado de este archivo de volcado realmente depende de cómo el desarrollador especifique los argumentos de salida (algunos pueden solicitar declaraciones DROP IF EXISTS, o comentarios que se incluirán, por ejemplo), así que esto no es muy confiable. Extraer cada tabla parece demasiado tedioso para lo que vale y tiene los mismos problemas de inconsistencia. – David

+0

Yo estandarizaría la forma en que extrae los scripts, por ejemplo, siempre tiene drop si existe y declaraciones de permisos, formato estándar. Además, si tiene sus objetos individualmente programados, y los desarrolladores comprometen todos los objetos relacionados con un cambio en una confirmación, se vuelve más manejable. Asumo que cuando te comprometes y resuelves, estás mirando un archivo grande y haciendo un montón de desplazamiento. Cuando trabajas con archivos individuales, esto obliga a concentrarte en una cosa. Solo necesita extraer todo una vez, en el último estado de producción en funcionamiento y trabajar desde allí. – Steve

4

Si está poniendo código php en su base de datos, entonces lo está haciendo mal. Algunas cosas están dentro de la base de datos como vistas y campos cck más algunas configuraciones. Pero si coloca el código php dentro del cuerpo del nodo, está creando un gran problema de mantenimiento del código. Realmente debería usar la API y los ganchos en su lugar. Cree módulos en lugar de feos hacks con eval etc.

+1

Buena sugerencia, gracias. Sin embargo, esto aún deja la pregunta abierta sobre cómo combinaría otros cambios en la base de datos que los desarrolladores realizan en sus entornos locales (como agregar campos CCK o configuraciones de nodos) antes de que todo se active en una base de datos central. El código PHP personalizado es uno de los pocos tipos de entrada integrados en Drupal (con la garantía de que puede deshabilitarlo en Drupal 6), lo que sugiere que es una característica más flexible de este CMS que un hack feo. – David

+0

Existe para trabajos rápidos y sucios, pero generalmente se considera como una mala idea; se debe evitar todo código evaluado. El problema que enfrenta es un caso perfecto en el punto. Es una buena característica, es bueno para experimentos rápidos y construcción de CCK/Vistas que sabes que exportarás y ejecutarás como código de archivo plano. – Grayside

2

Todo lo que se ha dicho anteriormente es cierto y un buen consejo .. Para responder a su pregunta práctica, hay una serie de módulos recientes que podría usar para transportar los cambios realizados por los diversos desarrolladores.

Los módulos de "Características" son una cura para el problema descrito de Drupal, que a menudo proporciona buenas características, aunque almacena muchas configuraciones y estructura en la base de datos. Este módulo le permite capturar una característica y emitirla como un pseudo-módulo (califica como un módulo con .info y archivos de código y todo).Así es como funciona:

  1. Seleccionar funcionalidad/función para exportar
  2. El módulo analiza los módulos, archivos, contenido DB que se requiere para reconstruir esa función en otro lugar
  3. El módulo crea un módulo seudo que contiene las instrucciones en # 3 y muestra todo (incluso SQL para reconstruir las cosas en la base de datos) en un paquete de módulos (así como establece dependencias para otros módulos necesarios)
  4. Instale el pseudo-módulo en su nuevo sitio y habilítelo
  5. El pseudo-módulo replica la función y ou exporta la reconstrucción de datos DB y todos

y se puede decir que su jefe lo hizo todo manualmente con enfoque de afeitar para evitar incluso 1 error;) Espero que esto ayude - http://drupal.org/project/features

Cuestiones relacionadas