El miércoles pasado, con sólo algunos bombos y no muchos más platillos, se publicó la versión 2.4 de Magento (en ambas ediciones, claro). Esta versión nos hace acordar a ese momento bisagra que fue Magento 1.4.1 a 1.5 (versión menor más, versión menor menos).

Nuevamente vemos esta suerte de separación entre el opaco anuncio comercial y los release notes:

Si bien hay algunas cuestiones funcionales que se introducen con esta versión, el cambio casi paradigmático que encontramos tiene que ver con el stack de software. Pero vayamos por partes Jack.

Es la primera vez en mucho tiempo que tenemos tan pocas versiones activas. Para Magento 2.3.5 se publicó el parche p2.

Al anuncio se puede acceder desde aquí, aunque el nuevo hogar de estos reportes está aquí. Si estás con 2.3.5-p1 o una versión inferior, ya deberías tener todos los parches aplicados.

Se puede no estar en la última versión, pero no se debe no tener el último parche. Así que… happy patching!

En cuanto al costado comercial y funcional de la versión, tenemos que:

  • Para todos los usuarios del backend se podrá requerir el uso de 2FA.
  • Circuitos de aprobación para compras en B2B.
  • Asistencia al comprador (lo cual te permite loguearte como el comprador para guiarlo, pero sólo, parece, para B2B).
  • Store Pickup integrado con MSI/Inventory Managment.
  • El media gallery recibió también una mejora sustancial (sospecharía que debemos agradecer a la integración con Adobe Stock).
  • El Web Set Up Wizzard se fue, para siempre.

Luego (o en otro post) intentaré volver sobre estos features y temas.

Vayamos ahora a la parte que realmente importa de la versión y que a los desarrolladores y devops les va a interesar y doler más. El stack cambia y pone requisitos altos. Muy altos si nos guiamos por aquello a lo que estábamos acostumbrados.

El primer cambio crítico es la versión de PHP. Con 2.4 las versiones de PHP soportadas son 7.3 y 7.4. Y es más, se recomienda usar 7.4 por sobre 7.3, ya que 7.3 no fue lo testeada lo suficiente como para dar las mismas garantías.

El segundo cambio tan crítico como el anterior, es que se quitó Mysql como motor de búsqueda interno y ahora Elastic Search deja de ser un componente opcional para ser obligatorio. Y como si eso no alcanzara, la versión mínima es de Elastic Search debe ser 7.6.

Sin dudas un cambio que despertó amores y odios al mismo tiempo. Lo cierto es que durante años se ha criticado por no usar lo último disponible en varios aspectos (por ejemplo: Prototype vs. jQuery, Less vs. Saas, versiones de PHP, versiones de Mysql, etc, etc, etc). En esta versión finalmente se da un salto cualitativo con el cual contamos con lo último de PHP (yo quizás hubiera intentado soportar 7.2 siendo que será una versión que seguirá viva hasta noviembre de este año); lo último de Mysql (que ha de impactar en cuestiones de performance principalmente), Elastic Search (durante años peleamos por tener Solr en Magento 1) y mejoras a la integración de Redis.

Pero voy a frenar acá porque la ansiedad me puede, y quiero probar el upgrade de stack. Gracias a que uso Docker sólo he tenido que ajustar alguna versión (en mi stack default para Magento pasé a PHP 7.4, MariaDB 10.4 y ElasticSearch 7.8.1).

Intenté hacer el upgrade repitiendo el camino conocido, pero no me funcionó en el primer intento.

Primero ejecuté.

composer require magento/product-community-edition 2.4.0 --no-update

Y luego el update:

composer update

Y no funcionó, claramente.

  Problem 1
    - magento/magento2-functional-testing-framework 2.6.4 requires php ~7.1.0||~7.2.0||~7.3.0 -> your PHP version (7.4.8) does not satisfy that requirement.
    - magento/magento2-functional-testing-framework 2.6.5 requires php ~7.1.0||~7.2.0||~7.3.0 -> your PHP version (7.4.8) does not satisfy that requirement.
    - magento/magento2-functional-testing-framework 2.6.4 requires php ~7.1.0||~7.2.0||~7.3.0 -> your PHP version (7.4.8) does not satisfy that requirement.
    - Installation request for magento/magento2-functional-testing-framework ~2.6.4 -> satisfiable by magento/magento2-functional-testing-framework[2.6.4, 2.6.5].

Y está bien que esto suceda porque como mencioné antes, el nivel de cambios que vienen al actualizar el stack de esta forma, lleva a la necesidad de actualizar paquetes que están en la raíz del composer.json.

La forma de actualizar fue la siguiente (explicado paso a paso, quizás muy verbose).

Instalar el Magento Composer root plugin.

composer require magento/composer-root-update-plugin=~1.0 --no-update

Actualizamos.

composer update

Y ahora vamos a hacer un backup que podríamos necesitar si algo fallara (cosa que no debería).

cp composer.json composer.json.bak

Ahora vamos a quitar el paquete:

composer remove magento/product-community-edition --no-update

Y agregamos nuestra nueva versión.

composer require magento/product-community-edition 2.4.0 --no-update

Ahora si, con todos los cambios que necesitamos, ejecutamos la actualización.

composer update

Dado que mi instancia ya estaba con Redis, me conecto y ejecuto:

redis-cli FLUSHALL

Ahora si, ya vuelvo a Magento.

bin/magento setup:upgrade

Cuando termine, ya podemos hacer la validación de rutina con:

bin/magento --version

Y deberíamos ver:

Magento CLI 2.4.0

Bien. Ahora la segunda parte (de tres que veremos aquí). Intentamos acceder al backend y luego de loguearnos vemos esto.

Bien, 2FA viene por defecto para el backend. Como es la primera vez, vamos a tener que configurar para nuestro usuario. Como bien dice la imagen, ya tengo mi email.

(Gracias Mailhog)

Hacemos click tal como se nos indica.

Y aquí tenemos que seleccionar el método (de los provistos por defecto) que vamos a querer utilizar. Vamos con Google Authenticator.

Seguimos el ritual, introducimos el código y listo.

Antes de avanzar, porque el proceso de actualización no terminó aún, vamos a ir a la configuración del catálogo y en la búsqueda vamos a cambiar una opción.

Antes tenía configurado Elastic Search 6.3.1, ahora debemos llevarlo a la versión 7 (estoy usando 7.8.1). Ahora si, vuelvo a la consola y reindexo.

bin/magento indexer:reindex

Una vez que haya finalizado, deberíamos obtener resultados de búsqueda.

Listo, estamos en 2.4.0 con Elastic Search 7. Lo que sigue a continuación es opcional, pero no es mala idea. Voy a reemplazar la versión de PHP. Para eso, tengo que ajustar mis containers.

Una vez hecho el cambio, mi versión de PHP es:

Resumiendo, el stack quedó con:

  • PHP 7.4.8
  • MariaDB 10.4
  • ElasticSearch 7.8.1
  • Redis 5.0.3

Con respecto a los cambios funcionales, al menos los disponibles en la edición Open Source (supongo que a fin de la semana podré dedicarle tiempo a la versión Commerce y/o Cloud), estas son algunas de las cosas que pude ver a simple vista.

Cuando definimos un nuevo Source en Magento Inventory, indicamos si es un Pickup Location.

El módulo security.txt (que se basa en esta propuesta) nos permite definir información de, valga la redundancia, contacto por temas de seguridad.

Tenemos el Log as Customer que es parte del core.

Los métodos de envío, antes conocidos como Shipping Methods, ahora son los Delivery Methods.

Y los que vienen por defecto son:

Es probable que hayan algunas pequeñas cosas que me esté pasando por alto.

Actualizar o no actualizar

Dado el impacto estructural que tiene este upgrade, si estás en producción y no necesitás algún feature específico de lo que viene con la versión, yo quizás optaría por darme tiempo y ver cómo madura no sólo la plataforma sino el ecosistema.

Eso último en relación a los módulos de terceros que suelen usarse, que deberían estar ya sin mayores problemas de compatibilidad, pero no hace mal esperar un poco (sabemos de algunos vendors en particular que suman x10 los dolores de cabeza).

Si estás en desarrollo y no entraste en el code freeze, quizás ahí me animaría a actualizar. En un proyecto comunitario del cual participo opté por esa opción.

Divergencia

Ya compartí cómo percibo a la plataforma en el último tiempo, y con este release no hay nada que me sugiera que se vaya a cambiar el rumbo.

Han habido algunas quejas en el último tiempo (algunas con las que concuerdo y muchas otras que creo que van por otro lado) sobre la dificultad y complejidad para el desarrollo y mantenimiento (técnico) de Magento.

Sin dudas, Magento 2.4 levanta la barrera de entrada (por ejemplo, no podemos instalar más extensiones si no es por consola o ftp) y ahora más que nunca es necesario evaluar si es la solución adecuada. No porque no se pueda usar sino porque, como ya he dicho, quizás estaré matando moscas con cañones.

Se hace más difícil la decisión cuando la plataforma sigue ofreciendo como principal diferenciador algo que es difícil de cuantificar: potencial. ¿Se acuerdan cuándo fue la última vez que tuvieron que decir «No, con Magento no se puede» o «No, esto no lo tiene, tengo que hacer un sistema aparte para darte algo parecido»?.

También es cierto que aún cuando la versión Open Source ofrece muchísimo más que cualquier otra opción en el mercado, se nota cada vez más ese aire enterprise. Las comunicaciones comerciales se esfuerzan el doble en marcar esa diferencia (por suerte el resultado en código viene equilibrando el asunto).