Usando Git Hooks y WP-CLI para Sincronizar bases de datos de WordPress
Muchas veces la base de datos se ignora en la sincronización y cada quien tiene un archivo wp-config.php
por separado.
Pero hay ocasiones en las que trabajar con bases de datos diferentes es muy molesto, y aunque en teoría sincronizar la base de datos en git es medio mala práctica, a veces no hay otra vuelta. Una solución es hacer un dump de la base de datos e incluirlo en el commit, pero esto se puede volver molesto, sin contar de que simplemente se te puede olvidar. Estar haciendo un dump cada vez que hagas commits es tedioso. Además, para que funcionen los links internos tenemos que hacer search and replace de la base de datos. Es cierto que podemos establecer hosts virtuales en común, pero si estamos trabajando localmente y con un servidor se pone complicada la cosa.
Existe una manera en la que podemos automatizar este proceso usando los hooks de git y wp-cli.
Cuando creamos un proyecto de git usando el comando conocido de
git init
Se crea en nuestro proyecto una carpeta oculta .git
. Si vemos dentro de esta carpeta encontramos la siguiente estructura
De aquí nos interesa la carpeta hooks. Cuando entramos vamos a ver una lista de archivos que todos terminan en .sample
#!/bin/sh
mysqldump -u [usuario] -p[clave] --skip-extended-insert [nombre_base_datos] > /ruta/a/tu/repo/[nombre_archivo].sql
cd /ruta/a/tu/repo
git add [nombre_archivo].sql
Ahora tenemos que hacer el script ejecutable
chmod +x /ruta/a/tu/repo/.git/hooks/pre-commit
Entonces a partir de ahora, cada vez que hagamos un commit automáticamente se hará un dump de la base de datos y se integrará a nuestro commit.
Ahora vamos a crear el post-merge que se ejecuta cada vez que hacemos un pull. Recordemos que, técnicamente, cada vez que hacemos un pull git hace un merge, no solamente cuando ejecutamos el comando git merge para unir dos branches.
Por alguna razón mi git no genera el archivo post-merge.sample, sin embargo, si se crea el archivo, funciona a la perfección.
#!/bin/sh
mysql -u [usuario] -p[clave] [nombre_base_datos] < /ruta/a/tu/repo/[nombre_archivo].sql
Hasta aquí vamos bien, pero igual tendríamos el problema de las rutas malas en nuestra base de datos. Podemos agregar después la magia de wp-cli
, si vemos la documentación podemos correr el siguiente comando:
wp search-replace [vieja_url] [nueva_url]
Nuestro archivo completo sería así:
#!/bin/sh
mysql -u [usuario] -p[clave] [nombre_base_datos] < /ruta/a/tu/repo/[nombre_archivo].sql
wp search-replace [vieja_url] [nueva_url]
Sólo nos falta colocar éste como ejecutable también
chmod +x /ruta/a/tu/repo/.git/hooks/post-merge
Y estamos listos. Ahora cada vez que hagamos un commit, la base de datos se sincronizará; y cada vez que hagamos un pull, también nos traeremos los últimos cambios de ésta sin problemas.
Este artículo aparece originalmente en reactor.cl, agencia en la que trabajaba en ese momento.