Antes que nada decir que esto está probado sobre un Prestashop 1.6 en desarrollo. Se clonó el sitio de producción y trabajó sobre el clon. Nunca realizar esto sobre un sitio en producción, siempre sobre un sitio de desarrollo (en este caso el clon).

Tenía en principio un Prestashop 1.5 que quería actualizar a la útlima versión de Prestashop (1.7.2.0). Queríamos realizar este proceso utilizando el módulo 1-Click Upgrade para que este haga la actualización de los archivos y la base de datos correctamente. Los pasos a seguir fueron:

  • 1. Actualizar Prestashop 1.5 a 1.6. Este proceso se realizó correctamente con 1-click upgrade.
  • 2. Intenté actualizar a Prestashop 1.7 desde PS1.6, pero falló. Intenté de diferentes manera: deshabilitando módulos, agregando mas tiempo de ejecución a PHP, cambiando la config del módulo, etc. pero no hubo caso.
  • 3. Para poder actualizar tuve que modificar el módulo 1-Click Upgrade 1.6.7 para que no haga backup de la base de datos y de los archivos. Al estar trabajando sobre un clon, esto no hace falta (por eso la importancia de trabajar sobre un sitio de desarrollo). Una vez con la modificación, inicié la actualización, salteó los pasos de backup y actualizó correctamente.
  • 4. Limpiar caché de Prestashop 1.7 y limpiar el historial/cache del navegador para que tomé bien los css y js del nuevo template del admin.

El archivo a modificar del módulo es ruta-a-mi-tienda/modules/autoupgrade/AdminSelfUpgrade.php

La funciónes a modificar son: ajaxProcessBackupDB() y ajaxProcessBackupFiles. Linea #3662 aprox. Reemplazamos ajaxProcessBackupDB y ajaxProcessBackupFiles por:

public function ajaxProcessBackupDb()
{   
        unset($this->nextParams['backup_loop_limit']);
        unset($this->nextParams['backup_lines']);
        unset($this->nextParams['backup_table']);
        $this->stepDone = true;
        // reset dbStep at the end of this step
        $this->nextParams['dbStep'] = 0;

        $this->next_desc = sprintf($this->l('Database backup done in filename %s. Now upgrading files...'), $this->backupName);
        $this->next = 'upgradeFiles';
        return true;
}

public function ajaxProcessBackupFiles()
{
        $this->stepDone = true;
        $this->next = 'backupDb';
        $this->next_desc = $this->l('All files saved. Now backing up database.');
        return true;
}

Con esta modificación se evitan los backups de archivos y base de datos y 1-click upgrade actualiza bien a Prestashop 1.7 en sitios grandes.

Es recomendable una vez que se está en Prestashop 1.7 actualizar el módulo porque estas modificaciones quedarían obsoletas (a menos que el módulo en 1.7 también falle).
No hice un debugeo a fondo, pero sospecho que falla por la cantidad de archivos a copiar. La tienda tiene mas de 1000 productos, con mas 1 una foto por producto, además hay 5 tipos de imágenes en Prestashop, por lo tanto existen un total aprox. de 10.000 archivos de imágenes como mínimo. Muchisimas imágenes para hacer backup, sospecho que por ahí viene el problema y efectivamente salteando el paso del backup el módulo funciona. No hizo falta debugear más porque la actualización a Prestashop 1.7 con 1-click upgrade funcionó.

Es una lástima que el equipo de Prestashop no deje hacer la actualización paso por paso, de esta manera se resolvería el problema sin tener que modificar el módulo. Es claro que no tienen ganas de hacer esta modificación para que tengas que comprar un módulo de migración...

Published in Blog