Skip to main content

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

Alejo Sotelo - Developer
Alejo A. Sotelo - @alejoasotelo
Publicado el 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 de Alejo A Sotelo - Desarrollo Web

20 Noviembre 2024

Problemas al guardar Configuración en Joomla

Introducción: Cuando cambiamos de servidor un sitio web con Joomla, es común encontrarnos con pequeños problemas técnicos que, aunque frustrantes, pueden resolverse con algo de paciencia y conocimiento. En este artículo, quier...
16 Agosto 2024

Cómo Resolver la Lentitud de phpMyAdmin en un VPS de Donweb con Ferozo

Te pasó alguna vez que intentaste explorar con phpMyAdmin una base de datos con tablas InnoDB y te andaba extremadamente lento? Si es así, abajo te paso una posible solución. Introducción: Hace poco me encontré con un problem...
19 Julio 2024

Cómo detuve un ataque de Bots en un Formulario de Contacto sin reCAPTCHA

Hoy quiero compartir una experiencia reciente que tuve con un ataque de bots a un formulario de contacto en uno de mis proyectos. Este incidente me llevó a profundizar en los logs de acceso y a implementar una solución rápida p...
20 Diciembre 2022

Liberar memoria ram en servidor CentOS

Cómo liberar memoria RAM en un servidor CentOS En este tutorial, te explicaré cómo liberar memoria RAM en un servidor CentOS utilizando comandos simples desde una sesión SSH. Sigue estos pasos para optimizar el rendimiento de ...