viernes, 29 de mayo de 2009

Joomla Pack - Problema con InnoDB

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.

Joomla Pack 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 solucion que daban era incluir una instrucción sql mas al principio del archivo sql de la exportación, y despues 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 codigo 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 foraneas, lo que permite la creación de las tablas. Como la variable que modificamos es una variable de sesion, no es necesario volver el valor a 1, ya que en la siguiente conexión, este ya habrá cambiado.

Un saludo a todos.

No hay comentarios:

Publicar un comentario