Distribuzione non riuscita durante lo svuotamento della cache: errore "Nessun comando definito nello spazio dei nomi 'cache'"
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.
-
SSH al server ed eseguire il comando seguente:
bin/magento
-
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.
-
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);
-
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);
-
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);
-
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.