¿Por qué ocurre el error 'One or more indexers are invalid' en Magento?
El error 'One or more indexers are invalid' es uno de los problemas más comunes en Magento 2. Este fallo indica que los datos de tu tienda, como los precios, el inventario, los clientes y las categorías, no están sincronizados correctamente en la base de datos de lectura rápida. Magento utiliza indexadores para acelerar la carga de la web, pero si estos se quedan obsoletos o bloqueados, el rendimiento y la visualización de los productos se ven gravemente afectados.
Las causas principales de este fallo suelen ser la falta de ejecución del sistema de tareas programadas (cron jobs) de Magento, procesos de indexación interrumpidos por falta de memoria RAM o bloqueos en la base de datos de tu servidor web.
Método 1: Reindexar y restablecer los indexadores desde la consola CLI
La forma más rápida y efectiva de solucionar este problema es conectarte a tu servidor mediante SSH y ejecutar la reindexación manual utilizando la interfaz de línea de comandos de Magento.
- Accede a tu servidor mediante SSH y dirígete al directorio raíz de tu instalación de Magento.
- Si los indexadores se han quedado en un estado de bloqueo permanente (suspendidos en estado 'Processing'), debes restablecer su estado ejecutando el siguiente comando:
php bin/magento indexer:reset - Una vez restablecidos, inicia el proceso de reindexación manual con este comando:
php bin/magento indexer:reindex - Finalmente, vacía la caché de Magento para aplicar todos los cambios en el frontend de la tienda:
php bin/magento cache:flush
Método 2: Configurar las tareas programadas (Cron Jobs)
Si solucionas el error con el método anterior pero vuelve a aparecer después de unas horas, significa que las tareas cron de tu servidor no están configuradas o no se están ejecutando. Magento necesita el cron para automatizar la indexación de forma constante.
- Abre la terminal de tu servidor y edita el archivo crontab del usuario del servidor web (usualmente www-data, apache o nginx) ejecutando:
crontab -e - Añade las siguientes líneas de configuración para asegurar el correcto funcionamiento de los procesos internos de Magento (asegúrate de reemplazar la ruta por la ubicación real de tu instalación):
* * * * * /usr/bin/php /var/www/html/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /var/www/html/var/log/magento.cron.log 2>&1 - Guarda los cambios y cierra el editor. El cron de Magento ahora se ejecutará automáticamente cada minuto, manteniendo los indexadores actualizados sin intervención manual.
Método 3: Incrementar el límite de memoria de PHP
En tiendas Magento con catálogos grandes, la reindexación puede fallar a mitad de proceso debido a que el servidor excede el límite de memoria permitido por PHP, dejando los indexadores en estado inválido.
- Para solucionar esto, puedes forzar un límite de memoria temporalmente superior al ejecutar el comando de reindexación:
php -d memory_limit=2G bin/magento indexer:reindex - También se recomienda modificar el archivo php.ini de tu servidor web para establecer de forma permanente un límite óptimo para Magento, ajustando el parámetro memory_limit a un mínimo de 2G o superior:
memory_limit = 2G