Tecnologías, Internet y Contenidos v. 2.0

Joomla, Wordpress, Blogger, Twitter...

Me encontraba realizando una migración de una web en Joomla, con JoomlaPack instalado, la tarea no podía parecer mas fácil pero surgió un error.

JoomlaPack es un componente gratuito para Joomla que te permite entre otras cosas crear y gestionar copias de seguridad de tu sitio web. Funciona a la perfección, salvo si alguna de las tablas de la base de datos de tu sitio utiliza el motor InnoDB, y este es mi caso. Pues di con la respuesta.

En la mayoría de los foros, la solución que daban era incluir una instrucción sql mas al principio del archivo sql de la exportación, y después utilizar phpmyadmin para importar la base de datos, lo que divide la migración en dos pasos.

Para evitar esta división y que el componente siga manteniendo por completo su utilidad, he dado con una pequeña modificación para parchear este problema.

Basta con modificar el archivo ajaxtool.php que se encuentra en el directorio installation, añadiendo las dos lineas en negrita que se ven en el código que sigue, dentro de la función populateDB();

foreach($linesSQL as $sql) {
$sql = trim( $sql );
$split_sql = @str_split($sql);
if ( ( !empty( $sql ) ) && ( $split_sql[1] != '#' ) ) {
$database->setQuery("SET SESSION FOREIGN_KEY_CHECKS=0;");
$database->query();
$database->setQuery( $sql );
if (!$database->query()) {
$retArray['error'] = 'A database error occurred when running query
' .
$database->getQuery() . "
The error was" . $database->getErrorMsg();
return $retArray;
}

}
}


Esto desactiva la comprobación de las claves foráneas, lo que permite la creación de las tablas. Como la variable que modificamos es una variable de sesión, no es necesario volver el valor a 1, ya que en la siguiente conexión, este ya habrá cambiado.

Un saludo a todos.

0 comentarios

Publicar un comentario

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.