Bereitstellung bei Cache-Leerung fehlgeschlagen: Fehler „Im Namespace 'cache' sind keine Befehle definiert.“
Dieser Artikel bietet eine Lösung für das Problem, wenn Ihre Bereitstellung fehlschlägt und einer der Fehler im Protokoll wie folgt aussieht:
[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.
Betroffene Produkte und Versionen
Adobe Commerce auf Cloud-Infrastruktur 2.4.x
Problem
Schritte zur Reproduktion:
Versuchen Sie, bereitzustellen.
Erwartete Ergebnisse:
Sie haben erfolgreich bereitgestellt.
Tatsächliche Ergebnisse:
Die Bereitstellung ist nicht erfolgreich. In den Protokollen wird ein Bereitstellungsfehler mit einer Meldung ähnlich der folgenden angezeigt Der Cache-Namespace enthält keine Befehle.
Ursache
Die core_config_data
enthält Konfigurationen für eine Store-ID oder Website-ID, die nicht mehr in der Datenbank vorhanden ist. Dies tritt auf, wenn Sie eine Datenbanksicherung aus einer anderen Instanz/Umgebung importiert haben und die Konfigurationen für diese Bereiche in der Datenbank verbleiben, obwohl die zugehörigen Stores/Websites gelöscht wurden.
Lösung
Wenn Sie nur eine Website hatten, dann gilt der zweite Test für die Websites nicht, und Sie müssen nur auf Geschäfte testen.
Um dieses Problem zu beheben, identifizieren Sie die ungültigen Zeilen, die von diesen Konfigurationen übrig bleiben.
-
SSH auf den Server übertragen und diesen Befehl ausführen:
bin/magento
-
Die Fehlermeldung kann anzeigen, welche Zeilen und Tabellen von gelöschten Sites in der Datenbank verbleiben. Im Folgenden finden Sie beispielsweise einen Fehler, der angibt, dass der angeforderte Speicher nicht gefunden wurde:
code language-... In StoreRepository.php line 112: The store that was requested wasn't found. Verify the store and try again.
-
Führen Sie diese MySQL Abfrage aus, um zu überprüfen, ob der Speicher nicht gefunden werden kann. Dies wird durch die Fehlermeldung in Schritt 2 angezeigt.
code language-sql select distinct scope_id from core_config_data where scope='stores' and scope_id not in (select store_id from store);
-
Führen Sie die folgende MySQL aus, um die ungültigen Zeilen zu löschen:
code language-sql delete from core_config_data where scope='stores' and scope_id not in (select store_id from store);
-
Führen Sie diesen Befehl erneut aus:
bin/magento
Wenn Sie einen Fehler wie den folgenden erhalten, der anzeigt, dass die angeforderte Website mit der ID X nicht gefunden wurde, verbleiben Konfigurationen in der Datenbank von Websites sowie von Stores, die gelöscht wurden.
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.
Führen Sie diese MySQL Abfrage aus und überprüfen Sie, ob die Website nicht gefunden werden kann:
code language-sql select distinct scope_id from core_config_data where scope='stores' and scope_id not in (select store_id from store);
-
Führen Sie diese MySQL aus, um die ungültigen Zeilen aus der Website-Konfiguration zu löschen:
code language-sql delete from core_config_data where scope='websites' and scope_id not in (select website_id from store_website);
Um zu bestätigen, dass die Lösung funktioniert, führen Sie den bin/magento
erneut aus. Die Fehler sollten nicht mehr angezeigt werden und können erfolgreich bereitgestellt werden.
Verwandtes Lesen
- Fehlerbehebung bei der Bereitstellung von Adobe Commerce
- Überprüfen des Bereitstellungsprotokolls, wenn in der Cloud-Benutzeroberfläche der Fehler „Protokoll abgeschnitten“ auftritt
- Best Practices zum Ändern von Datenbanktabellen im Commerce-Implementierungs-Playbook