Distribuzione non riuscita durante lo svuotamento della cache: errore "Nessun comando definito nello spazio dei nomi 'cache'"

WARNING
Esegui il backup del database prima di eseguire questi passaggi, se lo stai facendo in un sito di produzione live.

Questo articolo fornisce una soluzione al problema che si verifica in caso di errore di distribuzione e uno degli errori nel registro è simile al seguente:

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

Prodotti e versioni interessati

Adobe Commerce sull’infrastruttura cloud 2.4.x

Problema

Passaggi da riprodurre:

Tentativo di distribuzione.

Risultati previsti:

Distribuzione completata.

Risultati effettivi:

La distribuzione non è riuscita. Nei registri viene visualizzato un errore di distribuzione con un messaggio simile al seguente Nessun comando nello spazio dei nomi della cache.

Causa

La tabella core_config_data contiene configurazioni per un ID archivio o un ID sito Web che non esiste più nel database. Ciò si verifica quando si importa un backup del database da un'altra istanza o da un altro ambiente e le configurazioni per tali ambiti rimangono nel database anche se gli store o i siti Web associati sono stati eliminati.

Soluzione

Se disponi di un solo sito web, il secondo test per i siti web non è applicabile e devi solo verificare la presenza di negozi.

Per risolvere questo problema, identifica le righe non valide rimaste da tali configurazioni.

  1. SSH al server ed eseguire il comando seguente:

    bin/magento

  2. Il messaggio di errore può indicare quali righe e tabelle rimangono nel database dai siti eliminati. Ad esempio, di seguito è riportato un errore che indica che l’archivio richiesto non è stato trovato:

    code language-...
    In StoreRepository.php line 112:
    
    The store that was requested wasn't found. Verify the store and try again.
    
  3. Eseguire questa query MySQL per verificare che non sia possibile trovare l'archivio, indicato dal messaggio di errore nel passaggio 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. Eseguire l'istruzione MySQL seguente per eliminare le righe non valide:

    code language-sql
    delete from core_config_data where scope='stores' and scope_id not in (select store_id from store);
    
  5. Esegui di nuovo questo comando:

    bin/magento

    Se ricevi un errore simile al seguente che indica che il sito web con ID X richiesto non è stato trovato, sono presenti configurazioni rimanenti nel database dai siti Web e dai negozi che sono stati eliminati.

    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.
    

    Eseguire questa query MySQL e verificare che il sito Web non sia stato trovato:

    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. Eseguire questa istruzione MySQL per eliminare le righe non valide dalla configurazione del sito Web:

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

Per verificare che la soluzione funzioni, eseguire di nuovo il comando bin/magento. Gli errori non dovrebbero più essere visualizzati e la distribuzione può essere eseguita correttamente.

Lettura correlata

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