Échec du déploiement lors de la purge du cache : erreur "Aucune commande n’est définie dans l’espace de noms 'cache'"

WARNING
Sauvegardez d’abord la base de données, si vous effectuez cette opération dans un site de production actif, avant d’effectuer ces étapes.

Cet article fournit une solution au problème lorsque votre déploiement échoue et que l’une des erreurs dans le journal ressemble à ceci :

[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.

Produits et versions concernés

Adobe Commerce sur l’infrastructure cloud 2.4.x

Problème

Étapes à reproduire :

Tentative de déploiement.

Résultats attendus :

Déploiement réussi.

Résultats réels :

Vous ne déployez pas correctement. Dans les journaux, une erreur de déploiement s’affiche avec un message similaire au suivant. Il n’y a aucune commande dans l’espace de noms du cache.

Cause

La table core_config_data contient des configurations pour un identifiant de magasin ou un identifiant de site web qui n’existe plus dans la base de données. Cela se produit lorsque vous avez importé une sauvegarde de base de données à partir d’une autre instance/un autre environnement et que les configurations de ces portées restent dans la base de données bien que le ou les magasins/sites web associés aient été supprimés.

Solution

Si vous n’avez qu’un seul site web, le deuxième test pour les sites web ne s’applique pas, et il vous suffit de le tester pour les magasins.

Pour résoudre ce problème, identifiez les lignes non valides restantes de ces configurations.

  1. SSH sur le serveur et exécutez la commande suivante :

    bin/magento

  2. Le message d’erreur peut indiquer les lignes et les tableaux qui restent dans la base de données des sites supprimés. Par exemple, l’erreur suivante indique que le magasin demandé est introuvable :

    code language-...
    In StoreRepository.php line 112:
    
    The store that was requested wasn't found. Verify the store and try again.
    
  3. Exécutez cette requête MySQL pour vérifier que le magasin est introuvable, ce qui est indiqué par le message d’erreur à l’étape 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. Exécutez l’instruction MySQL suivante pour supprimer les lignes non valides :

    code language-sql
    delete from core_config_data where scope='stores' and scope_id not in (select store_id from store);
    
  5. Exécutez à nouveau cette commande :

    bin/magento

    Si vous obtenez une erreur comme celle ci-dessous qui indique que le site web avec l’ID X demandé est introuvable, il reste des configurations. dans la base de données du ou des sites web, ainsi que des magasins qui ont été supprimés.

    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.
    

    Exécutez cette requête MySQL et vérifiez que le site web est introuvable :

    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. Exécutez cette instruction MySQL pour supprimer les lignes non valides de la configuration du site web :

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

Pour confirmer que la solution a fonctionné, réexécutez la commande bin/magento. Les erreurs ne doivent plus s’afficher et le déploiement peut réussir.

Lecture connexe

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