it-swarm-es.tech

Archivos de migración: generación de scripts de migración sql posteriores a la actualización

Estoy buscando una forma organizada de ejecutar actualizaciones de joomla localmente y luego actualizar los sistemas de producción mediante la implementación de código + migraciones de db, para no tener que actualizar joomla en producción o deshabilitar el sitio mientras se ejecutan las actualizaciones. El componente de actualización actual utiliza una función específica para ejecutar actualizaciones SQL

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_joomlaupdate/models/default.php#L515

En finaliseUpgrade parece que está obteniendo/analizando algunas consultas y aplicándolas al esquema. Si entiendo esto correctamente, recorre los scripts/marcadores de posición en com_admin/sql/{DBType}/*. Sql detectando todas las nuevas versiones de archivos sql que tiene que ejecutarse en la base de datos.

El problema con estos scripts es que no veo cómo puedo usarlos como herramienta de migración para mi base de datos de producción, ya que tienen el prefijo de tabla y también prefiero tener un solo script de migración consolidado.

¿Podría sugerir si joomla realmente escribe los cambios que realizó en algún lugar de un archivo de migración?

El archivo logs/joomla_update.php contiene algunos rastros de los cambios, pero estos se truncan ya que aparentemente solo registra unos pocos caracteres.

Cualquier sugerencia es muy apreciada.

3
Bizmate

Dos escenarios:

Desarrollo, puesta en escena-autoría, producción

La producción es de solo lectura, la puesta en escena es donde se prepara el contenido y se realizan las pruebas. Joomla siempre se actualiza en Staging, luego el db se guarda junto con el commit y se restaura en la producción de extracción.

Desarrollo, Puesta en escena, Producción

Los contenidos se editan en Producción. Las actualizaciones de Joomla se realizan en Staging. Una vez que los presione, solo vaya a extensiones/base de datos y presione Reparar. O, para servidores más grandes, automatícelo con un complemento del sistema (escriba un complemento que escuche algunos parámetros en onAfterRoute, verifique si es una llamada local ($ _SERVER ['REMOTE_ADDR'] = '127.0.0.1' y programe un trabajo cron para invocarlo).

Actualización

Para realizar las actualizaciones de db después de cada actualización de versión, tiene dos formas:

Automático

Vaya a administrador - extensiones - administrador de extensiones, haga clic en la base de datos a la izquierda y haga clic en "Reparar" en la parte superior.

Si esta página tiene errores (el caso al actualizar de 2.5 a 3.3), intente ir directamente a la url:

/administrator/index.php?option=com_installer&view=database

Manual

Cuando lo anterior falla, (ver también el comentario de @ Diego a continuación):

 find administrator/components/com_admin/sql/updates/mysql/3*.sql | grep mysql > 33.listsql

y ajusta los archivos relevantes (las versiones afectadas están en el nombre del archivo)

Entonces, siempre que j25 sea su prefijo db

cat 33.listsql | xargs cat > 33.sql
sed -i 's/#_/j25/' 33.sql
mysql -u user --password="somepass" dbname < 33.sql
1
Riccardo Zorn