1-Click Upgrade falla al actualizar a Prestashop 1.7 [Solución]


19 Febrero 2018

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...

Más artículos


Soy Desarrollador Mercado Pago Certificado

02 Octubre 2020
Para Online Payments Checkout Pro. Esta semana participé del "Mercado Pago Developer Partner Program" y luego de realizar el examen correspondiente fuí aprobado para ser "Mercado Pago Certified Developer for Online Payments ...

Calculadora Compuesta de Cauciones - Proyecto personal

17 Marzo 2020
Bueno, encaré este proyecto viendo que IOL (InvertirOnline) daba un excel para el cálculo estimativo de las ganancias para las cauciones y siempre por mi cuenta calculaba las ganancias haciendo interés compuesto. Por ejemplo s...

Libreria PHP para Andreani REST

24 Agosto 2019
Qué es esto? Es una librería php para conectar con la Api REST de Andreani. Creé la librería porque me ví casi forzado a migrar a la Api REST de Andreani. Hice un módulo en su momento, y sigo manteniendo, para Prestashop de And...

Liberar memoria ram en servidor CentOS

01 Agosto 2019
Cómo hacemos para liberar la memoria ram de nuestro servidor CentOS? Bueno, entramos por ssh al servidor y luego ejecutamos los siguientes comandos: free -m sudo sync && sudo sysctl -w vm.drop_caches=3 free -m ...

Agregar reCaptcha en Joomla 1.5

03 Abril 2019
Para agregar reCaptcha al contacto en Joomla 1.5 (SOLO J1.5) instalamos el plugin reCAPTCHAIntegrator y luego copiamos el archivo /components/com_contact/views/contact/tmpl/default_form.php a /templates/NOMBRE_TEMPLATE/html/com...

Configurar DKIM con Exim en Centos 7

13 Febrero 2019
Vamos a configurar DKIM con Exim en CentOS 7. Primero vamos a generar las claves privada y pública con openssl, sin utilizar opendkim ni nada parecido. Conectamos vía SSH al servidor en cuestión y ejecutamos: openssl genrs...