database - relacionadas - relacion muchos a muchos laravel
¿Cómo puedo mantener los datos sincronizados durante la implementación? (4)
Para la sincronización de datos básica: utilizo mysqldump para volcar todos los datos en un archivo .sql cada noche. El script luego lo verifica en el sistema de control de versiones. Esto está cronned en un simple script bash, pero podrías hacer algo similar en casi cualquier plataforma ...
Acabo de leer un poco más y no estoy seguro si mi método ayudará. Nunca tuve que fusionar un volcado de SQL por lo que no puedo comentar sobre la eficacia con la que se gestiona.
Aunque debería poder enviar cambios (esquema, datos nuevos) al servidor de producción / producción, es posible que tenga más problemas para volver a convertir los cambios en dev. Como digo, la fusión puede o no ser posible. Simplemente no sé.
Tengo la oportunidad de producir sitios web de Drupal utilizando entornos de desarrollo, montaje y producción. Mantener el código sincronizado entre los sitios es una tarea simple que utiliza subversión. Lo que no es tan simple es propagar cambios a los datos de la base de datos (no solo al esquema) entre las instalaciones.
El motivo de esto será familiar para cualquier desarrollador de Drupal. Drupal almacena ciertas configuraciones en la base de datos, específicamente relacionadas con campos CCK, Vistas y otros módulos que permiten que las cosas se configuren dinámicamente usando la interfaz de administración. Simplemente sincronizar el esquema no es suficiente: la información esencial también está en los datos.
Lo que estoy buscando es una forma de sincronizar estos cambios de base de datos para que si un desarrollador hace cambios de campo CCK en el servidor de etapas, se puedan propagar a entornos de desarrollo locales para más trabajo y, finalmente, hasta el entorno de producción.
¿Hay alguna herramienta que haga esto? ¿Cuál es su proceso para manejar desarrolladores individuales o múltiples en un proyecto como este?
Por aquí, hemos relegado bastante a CCK para utilizarlo en prototipos y tipos de nodos simples. No vale la pena el dolor de cabeza de tratar de separar la ''configuración'' del ''contenido'' en la base de datos. Hay muchas maneras en las que puede tratar de mantener las cosas sincronizadas, pero, en resumen, a menos que estén en un archivo o le den la opción de exportar a uno, le hará daño. (Como una ventaja adicional, exportar sus vistas a un archivo va a ser un poco más rápido que sacarlo del DB cada vez que se usa).
Mencionas los servidores Dev, Staging y Live: si tienes desarrolladores que realizan cambios no documentados en la puesta en escena, estás jodido. Si tiene la organización sincronizada regularmente con Live y ordena la política (de sentido común) de que los únicos cambios realizados en la etapa de transición son cosas que se han resuelto en Dev y se están probando antes de pasar a Live, es posible que tenga más éxito.
Usar el sistema de control de versiones de la base de datos Para esto necesita una tabla VersionInfo en la base de datos y todas sus consultas sql ddl y dml en formato xml junto con la información de la versión. Ahora solo tiene una herramienta .net simple que verificará la tabla VersionInfo y ejecutará todas las consultas de xml que se agreguen después de esa versión y actualizará la versión a la actual en versionInfo.
Intenté responder cómo hago esto en otra pregunta. Lo publicaré aquí también
Creo que una buena estrategia aquí es usar la API de perfil de instalación. Con la API de perfil de instalación puede hacer la mayoría de las cosas que hacen las herramientas de administración de Drupal. La mayoría de las formas básicas simplemente configuran variables en la tabla de variables. Para poder realizar una versión sensata de los contenidos de la base de datos que no son de contenido, es decir, la configuración, es aconsejable usar las funciones de actualización.
En mi sitio tenemos el módulo "ec" que hace muy poco aparte de tener su archivo ec.install que contiene funciones de actualización, por ejemplo, ec_update_6001 ()
Su función principal de instalación puede encargarse de ejecutar realmente las actualizaciones en cualquier instalación nueva que realice para actualizar sus módulos.
function ec_install() {
$ret = array();
$num = 0;
while (1) {
$version = 6000 + $num;
$funcname = ''ec_update_'' . $version;
if (function_exists($funcname)) {
$ret[] = $funcname();
$num++;
} else {
break;
}
}
return $ret;
}
Una función de actualización de muestra o dos de nuestro archivo actual ahora sigue
// Create editor role and set permissions for comment module
function ec_update_6000() {
install_include(array(''user''));
$editor_rid = install_add_role(''editor'');
install_add_permissions(DRUPAL_ANONYMOUS_RID, array(''access comments''));
install_add_permissions(DRUPAL_AUTHENTICATED_RID, array(''access comments'', ''post comments'', ''post comments without approval''));
install_add_permissions($editor_rid, array(''administer comments'', ''administer nodes''));
return array();
}
// Enable the pirc theme.
function ec_update_6001() {
install_include(array(''system''));
// TODO: line below is not working due to a bug in Install Profile API. See http://drupal.org/node/316789.
install_enable_theme(''pirc'');
return array();
}
// Add the content types for article and mtblog
function ec_update_6002() {
install_include(array(''node''));
$props = array(
''description'' => ''Historical Movable Type blog entries'',
);
install_create_content_type(''mtblog'', ''MT Blog entry'', $props);
$props = array(
''description'' => ''Article'',
);
install_create_content_type(''article'', ''Article'', $props);
return array();
}
Efectivamente, esto resuelve principalmente el problema de las versiones con bases de datos y código de Drupal. Lo usamos ampliamente Nos permite promocionar un nuevo código que cambia la configuración de la base de datos sin tener que volver a importar la base de datos o realizar cambios en vivo. Esto también significa que podemos probar adecuadamente las versiones sin temor a cambios ocultos en la base de datos.
Finalmente, cck y views apoyan este enfoque. Ver este fragmento de código
// Enable CCK modules, add CCK types for Articles in prep for first stage of migration,
// enable body for article, enable migration modules.
function ec_update_6023() {
$ret = array();
drupal_install_modules(array(''content'', ''content_copy'', ''text'', ''number'', ''optionwidgets''));
install_include(array(''content'', ''content_copy''));
install_content_copy_import_from_file(drupal_get_path(''module'', ''ec'') . ''/'' . ''article.type'', ''article'');
$sql = "UPDATE {node_type} SET body_label=''Body'', has_body=1
WHERE type = ''article''";
$ret[] = update_sql($sql);
return $ret;
}