Resumen rápido si no quieres perder tiempo: No lo intentes, usa Ubuntu 15.10 y todo irá a la perfección.
La historia
Al intentar migrar la versión de Prestashop 1.6.0.6 a un VPS con Ubuntu 16.04 surgen multitud de problemas que conviene tener en cuenta si lo que queremos es migrar la tienda a un nuevo hosting sin realizar una actualización a la última versión disponible (1.6.1.5 a fecha de hoy).
La primera pregunta que surge es: si hay problemas con esa versión antigua, ¿por qué no actualizarla antes de realizar la migración?. La respuesta es sencilla: un cambio de hosting es una operación relativamente sencilla y poco costosa, mientras que una actualización de Prestashop puede resultar bastante compleja y cara en recursos y tiempo, por lo que conviene planificarla, sobre todo cuando se actualiza de una versión muy antigua (la 1.6.0.6 es de hace 2 años -2014-)
La segunda pregunta que surge es: si hay problemas instalando en Ubuntu 16.04, ¿por qué no hacerlo en una versión anterior de Ubuntu?. Efectivamente al final es lo que terminé haciendo pues resulta que la instalación en esta versión resulta más cara que el posible beneficio de utilizar la última versión de este S.O.
En cualquier caso quiero dejar constancia de los problemas con los que me encontré por si a alguien le resultan interesantes.
Lo que realmente hice fue instalar una versión limpia de PS 1.6.0.6 para ver si surgía algún problema y proceder a la migración en caso de que todo fuera bien. En caso de ir mal una instalación limpia y de ser incapaz de solucionar los problemas, directamente desistiría de la migración, que como digo, fue lo que finalmente ocurrió.
1. El problema con PHP5
El primer problema con el que me encontré es que PHP5 ya no es una opción con Ubuntu 16.04. Al menos no desde los repositorios oficiales accesibles con apt-get, así que si quería usar PHP5 tendría que compilarlo, y yo no estaba por la labor, así que decidí probar con PHP7. Para mi sorpresa, esto no supuso ningún problema, excepto…
2. El problema con SimpleXMLElement
La instalación se bloqueaba en los primeros pasos. En el log de errores de Apache se podía leer:
[Wed Jun 01 13:36:58.391984 2016] [:error] [pid 15802] [client 83.59.217.153:55071] PHP Fatal error: Class 'SimpleXMLElement' not found in /midominio.com/www/install/classes/simplexml.php on line 27
Me costó poco esfuerzo averiguar que la clase SimpleXMLElement ya no viene por defecto en PHP7, así que hay que instalarla manualmente:
apt-get install php-simplexml
Lo cual me permitió seguir adelante hasta que, al llegar al 45% del proceso los problemas volvían a aparecer…
3. El error «xxx/install/sandbox/anything.php’ not found or unable to stat»
La instalación se quedaba al 45%, y en el log de errores de Apache podía leerse:
[Wed Jun 01 13:50:30.802896 2016] [:error] [pid 18616] [client 83.59.217.153:55263] script '/midominio.com/www/install/sandbox/anything.php' not found or unable to stat, referer: http://midominio.com/install/index.php
mientras que en el log de instalación de la aplicación:
*ERROR* 2016/06/01 - 13:51:26: No se puede crear la cuenta de administrador
Después de dar muchas vueltas di con que el instalador intenta insertar un registro para representar la cuenta del administrador en la tabla ps_employee usando la fecha 0000-00-00 en los campos stats_compare_from y stats_compare_to. Esta fecha es inválida para MySQL 5.7, que es la versión del servidor MySQL que se instala por defecto en Ubuntu 16.04 con:
apt-get install mysql-server
Revisando la documentación de MySQL encontré que podía añadir un modo sql al arranque del SGBD que permitiera insertar este tipo de fechas que antes eran válidas y ya no lo son más. Para solucionarlo creé el fichero /etc/mysql/conf.d/mysql_prestashop.cnf con el siguiente contenido:
[mysqld] sql-mode="ALLOW_INVALID_DATES"
Después de reiniciar MySQL pude comprobar que el problema se solucionaba y permitía finalizar el proceso de instalación. ¡Bieeeen!. Por cierto, para más información sobre ALLOW_INVALID_DATES: http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_allow_invalid_dates
4. El problema con ALTER IGNORE TABLE
Ya tenía instalado mi Prestashop 1.6.0.6 limpio y podía navegar sin problemas por el backend y frontend fluidamente, así que parecía que ya todo iría sobre ruedas. Lo último que quería hacer era realizar una prueba de actualización a la última versión de Prestashop porque, a fin de cuentas, tarde o temprano tendría que realizar esta operación, así que ¿por qué no probarla ya?. La sopresa fue grande: Me encontré con que no se actualizaba ninguno de los módulos debido a que el actualizador tiraba múltiples errores SQL en todas las líneas del instalador que contenían la orden MySQL «ALTER IGNORE TABLE».
Después de leer sobre los perjuicios de permitir que esta orden se ejecute de manera automática sin control humano (explicación de por qué los desarrolladores de MySQL han decidido quitarla después de marcarla como DEPRECATED durante varias versiones anteriores) y de -a pesar de todo- intentar encontrar un sql-mode que permita ejecutar estas consultas sin suerte, decidí que no había solución posible usando MySQL 5.7, así que me dispuse a usar MySQL 5.6, que aun permitía la ejecución de este tipo de consultas. Desinstalé la versión 5.7 y me dispuse a instalar la 5.6…
apt-get remove mysql-server-5.7 apt-get install mysql-server-5.6
Mala suerte… el sistema me informó que mysql-server-5.6 no está en el repositorio de aplicaciones de Ubuntu 16.04, así que si lo quería tener tendría que compilarlo. … Junto con todas sus dependencias. … Que podían romper otras partes del sistema. … Me di por vencido. Después de todo el esfuerzo, la conclusión terminó siendo que era mejor tirar la toalla con Ubuntu 16.04 e ir con Ubuntu 15.10 hasta que tuviera actualizada la tienda a la última versión de PS y pudiese volver a hacer pruebas.
Thank you very much!
I had to do the same for Prestashop 1.6.1.17
but I didnt had to do the ALLOW_INVALID_DATES stuff and instead of php-simplexml I installed php7.0-xml
I also had to install php7.0-mysql
php7.0mcrypt
and
php7.0mbstring
(they are immediatly enabled. No need to do
sudo phpenmod mcrypt
sudo phpenmod mbstring)
Thanks for commenting. Just curiosity: did you try de update process? How did it go?
Good luck!