Error de implementación al vaciar la caché: Error "No hay comandos definidos en el área de nombres "caché""

WARNING
Haga una copia de seguridad de la base de datos primero, si lo hace en un sitio de producción activo, antes de realizar estos pasos.

Este artículo proporciona una solución para el problema cuando la implementación falla y uno de los errores del registro tiene este aspecto:

[YEAR-DAYTIME] ERROR: [127] The command "php ./bin/magento cache:flush --ansi --no-interaction" failed.
        There are no commands defined in the "cache" namespace.
...
      W:     There are no commands defined in the "cache" namespace.

Productos y versiones afectados

Adobe Commerce en la infraestructura en la nube 2.4.x

Problema

Pasos a seguir:

Intento de implementación.

Resultados esperados:

Se ha implementado correctamente.

Resultados reales:

No se ha implementado correctamente. En los registros ve un error de implementación con un mensaje similar al siguiente No hay comandos en el espacio de nombres de la caché.

Causa

La tabla core_config_data contiene configuraciones para un identificador de tienda o sitio web que ya no existe en la base de datos. Esto ocurre cuando ha importado una copia de seguridad de base de datos desde otra instancia o entorno y las configuraciones de esos ámbitos permanecen en la base de datos aunque se hayan eliminado los almacenes o sitios web asociados.

Solución

Si solo ha tenido un sitio web, no se aplica la segunda prueba para los sitios web y solo necesita probar las tiendas.

Para resolver este problema, identifique las filas no válidas que quedan en esas configuraciones.

  1. SSH al servidor y ejecute este comando:

    bin/magento

  2. El mensaje de error puede indicar qué filas y tablas permanecen en la base de datos de sitios eliminados. Por ejemplo, a continuación se muestra un error que indica que no se encontró el almacén solicitado:

    code language-...
    In StoreRepository.php line 112:
    
    The store that was requested wasn't found. Verify the store and try again.
    
  3. Ejecute esta consulta MySQL para comprobar que no se encuentra el almacén, lo que se indica mediante el mensaje de error del paso 2.

    code language-sql
    select distinct scope_id from core_config_data where scope='stores' and scope_id not in (select store_id from store);
    
  4. Ejecute la siguiente instrucción MySQL para eliminar las filas no válidas:

    code language-sql
    delete from core_config_data where scope='stores' and scope_id not in (select store_id from store);
    
  5. Vuelva a ejecutar este comando:

    bin/magento

    Si obtiene un error como el siguiente que indica que no se encontró el sitio web con el ID X solicitado, tiene configuraciones restantes en la base de datos desde sitios web, así como tiendas que se han eliminado.

    code language-none
    In WebsiteRepository.php line 110:
    
    The website with id X that was requested wasn't found. Verify the website and try again.
    

    Ejecute esta consulta MySQL y compruebe que no se encuentra el sitio web:

    code language-sql
    select distinct scope_id from core_config_data where scope='stores' and scope_id not in (select store_id from store);
    
  6. Ejecute esta instrucción MySQL para eliminar las filas no válidas de la configuración del sitio web:

    code language-sql
    delete from core_config_data where scope='websites' and scope_id not in (select website_id from store_website);
    

Para confirmar que la solución funcionó, ejecute de nuevo el comando bin/magento. Ya no debería ver los errores y puede implementarlos correctamente.

Lectura relacionada

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a