En el post anterior había separado en 3 etapas (o grupos de tareas) la migración de este proyecto/experimento.
Dada la versión en la que quedó esta tienda y dado que el Migration Tool tiene algunas limitantes (razonables), lo primero que hice fue hacerme con cada una de las versiones necesarias para actualizar.
Las versiones descargadas fueron:
- 1.4.2.0 es la versión desde la que he comenzado.
- 1.5.0.0 fue descartada por problemas de seguridad.
- 1.6.0.0 es la versión mínima posible.
Teniendo todos los archivos necesarios, tocó el primer problema a resolver: tener un entorno con las versiones correctas del stack.
El problema principal fue la versión de PHP. La versión que soporta(ba) Magento 1.4.2.0 era 5.3, la cual ya sabemos no es mantenida desde hace unos 5 años.
La solución aquí fue usar Docker, para replicar el servidor entero. Tampoco fue mágico ya que la versión oficial de Ubuntu (SO que usa el servidor) no soporta ya (y está bien que así sea) la versión LTS de 2012. Luego de buscar y leer un poco, di con la siguiente imagen: bylexus/apache-php53. En general funciona sin cambios, aunque necesité corregir el vhost y agregar mcrypt.
La segunda parte fue Mysql. En este caso usé la imagen oficial de la versión 5.5.40, y agregué además PhpMyAdmin.
El archivo docker-compose usado fue:
version: "3.1"
services:
webserver:
image: bylexus/apache-php53
container_name: proyecto.m1.web
working_dir: /var/www/html
volumes:
- ./public:/var/www/html
- ./.docker/apache/virtualhost.conf:/etc/apache2/sites-enabled/000-default
- ./.docker/php/mcrypt.ini:/etc/php/5.3/apache2/conf.d/20-mcrypt.ini
- ./files/docker/php/curl.ini:/etc/php/5.3/apache2/conf.d/20-curl.ini
expose:
- "80"
networks:
- mynet
db:
image: mysql:5.5.40
container_name: proyecto.m1.mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=magento1
- MYSQL_USER=dev
- MYSQL_PASSWORD=dev
expose:
- "3306"
networks:
- mynet
phpmyadmin:
container_name: proyecto.m1.phpmyadmin
image: phpmyadmin/phpmyadmin:latest
expose:
- "80"
environment:
MYSQL_USERNAME: dev
MYSQL_ROOT_PASSWORD: dev
PMA_HOST: proyecto.m1.mysql
networks:
- mynet
mailhog:
image: mailhog/mailhog:latest
container_name: proyecto.m1.mailhog
expose:
- "1025"
- "8025"
networks:
- mynet
networks:
mynet:
external:
name: mynet
Una vez creados los containers y descargado el código del repositorio y la base de datos del servidor, fue momento de importar la DB.
Gran primer paso. Pude importar sin problemas (si, venía con las expectativas por el décimo subsuelo).
Momento de editar las credenciales del archivo /app/etc/local.xml y acceder al backend.
Esto sucede porque cada cierto tiempo, por si no recuerdan, Magento se conecta con el feed para bajar las admin notifications. No le di mayor importancia, refresqué y ahora si llegué al backend.
Al mirar el código, me encontré con esto.
Cuando en lugar de la URL al archivo se vea el path al archivo, el motivo ha de ser, en el 99,99% de los casos, que la carpeta media no existe. Luego de arreglar ese detalle, limpieza de cache y a refrescar la página.
La tienda quedó finalmente funcionando. Turno de los upgrades manuales.
Para ir de 1.4.2.0 a 1.5.0.1 simplemente descomprimí los archivos y pisé los del proyecto a mano. Actualizada la página del login, ingreso al backend nuevamente.
Todo funcionó bien, rápido y sin error en ningún lado. Momento del primer backup de base de datos.
El siguiente paso fue ir de 1.5.0.1 a 1.5.1.0. Se repitió operación: descomprimir, pisar, actualizar.
Impecable hasta acá.
A pesar de haber borrado a mano todo, por desconfianza, y aún logueado, voy a limpiar el cache desde el mismo backend (no tiene sentido, pero la desconfianza a que haya funcionado me ganó).
Esa preocupación por los errores y problemas comienza a disiparse. Ahora toca el salto de 1.5.1.0 a 1.6.0.0.
Repetimos acción: descomprimir, pisar, actualizar.
Comenzó la montaña rusa de sentimientos. Aquí el error fue humano. Al pisar los archivos me quedó mal el propietario de los mismos.
Reparado el permiso, reimporté la DB de 1.5.1.0 y a probar otra vez.
Tuve un error (1200 líneas aproximadamente del array explicativo) con una constraint.
Error in file: "/var/www/html/app/code/core/Mage/Customer/sql/customer_setup/mysql4-upgrade-1.5.9.9-1.6.0.0.php" - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0-304' for key 'UNQ_BY_CUSTOMER'
#0 /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php(645): Mage::exception('Mage_Core', 'Error in file: ...')
#1 /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php(437): Mage_Core_Model_Resource_Setup->_modifyResourceDb('upgrade', '1.4.0.0.14', '1.6.0.0')
#2 /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php(320): Mage_Core_Model_Resource_Setup->_upgradeResourceDb('1.4.0.0.14', '1.6.0.0')
#3 /var/www/html/app/code/core/Mage/Core/Model/Resource/Setup.php(235): Mage_Core_Model_Resource_Setup->applyUpdates()
#4 /var/www/html/app/code/core/Mage/Core/Model/App.php(408): Mage_Core_Model_Resource_Setup::applyAllUpdates()
#5 /var/www/html/app/code/core/Mage/Core/Model/App.php(336): Mage_Core_Model_App->_initModules()
#6 /var/www/html/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#7 /var/www/html/index.php(80): Mage::run('', 'store')
#8 {main}
La solución, truncar la tabla report_viewed_product_index.
Truncada la tabla, reimporté la DB de 1.5.1.0 y a probar otra vez.
Aparentemente un problema de encoding. Lo arreglé a mano, luego reimporté backup de 1.5.1.0 y a probar otra vez.
Apareció ese otro (y alguno más). Me ocupé entonces de corregir los posibles problemas de encoding de la tabla core_config_data.
Como no fueron más de 9 valores, los documenté y no indagué mucho más acerca del asunto ya que tienen solución.
Una vez corregido, de nueva a actualizar la página de login del backend.
Finalmente, sin errores. Ahora toca loguearse y ver qué pasa.
Todo funcionó correctamente. Luego de navegar un poco, todo se comportó correctamente.
Ahora si, mi base de datos está lista para la siguiente etapa: la migración de datos.
Tiempo empleado
Para finalizar, un detalle que comenté iba a ir publicando. ¿Cuánto tiempo me lleva todo el proyecto?.
De lo comentado aquí, el trabajo fue más o menos el siguiente.
- Crear entorno local con las versiones del stack específicas: 2 horas.
- Actualizar de 1.4.2.0 a 1.6.0.0 resolviendo y documentado los errores: 2 horas y 30 minutos.
Y este será el total que iré actualizando post por post.
Etapa1 | Etapa 2 | Etapa 3 |
0:00 horas | 0:00 horas | 4:30 horas |
El detalle de cada etapa está aquí.