キャッシュフラッシュのデプロイメントに失敗しました:「キャッシュ」名前空間にコマンドが定義されていません」エラー
クラウドインフラストラクチャ上のAdobe Commerceで「cache」名前空間にコマンドが定義されていません エラーが発生してデプロイが失敗した場合は、それらの設定から残った無効な行を特定します。 1 つの web サイトしかない場合、web サイトの 2 番目のテストは適用されず、ストアのテストのみが必要になります。
説明
環境
クラウドインフラストラクチャー 2.4.x 上のAdobe Commerce
問題
警告 :実稼動サイトでバックアップを行う場合は、次の手順を実行する前に、まずデータベースをバックアップしてください。
この記事では、デプロイメントが失敗し、ログ内のエラーのいずれかが次のような場合の問題の解決策を説明します。
[ 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.
再現手順 :
デプロイを試みます。
期待される結果 :
正常にデプロイされました。
実際の結果 :
デプロイに失敗しました。 ログには、「キャッシュ名前空間にコマンドがありません のようなメッセージを含むデプロイメントエラーが表示されます。
原因
core_config_data
テーブルには、データベースに存在しなくなったストア ID または web サイト ID の設定が含まれています。 この問題は、別のインスタンスまたは環境からデータベースバックアップを読み込んだ場合、関連するストアまたは web サイトが削除されていても、これらの範囲の設定はデータベースに残ります。
解決策
1 つの web サイトしかない場合、web サイトの 2 番目のテストは適用されず、ストアのテストのみが必要になります。
この問題を解決するには、これらの設定に残っている無効な行を特定します。
-
サーバーに SSH で接続し、次のコマンドを実行します。
bin/magento
-
エラーメッセージは、削除されたサイトからデータベースに残っている行とテーブルを示している場合があります。 例えば、次のエラーは、リクエストされたストアが見つからなかったことを示します。
... In StoreRepository.php line 112: The store that was requested wasn't found. Verify the store and try again.
-
この MySQL クエリを実行して、手順 2 のエラーメッセージで示されるストアが見つからないことを確認します。
select distinct scope_id from core_config_data where scope='stores' and scope_id not in (select store_id from store);
-
次の MySQL ステートメントを実行して、無効な行を削除します。
delete from core_config_data where scope='stores' and scope_id not in (select store_id from store);
-
もう一度このコマンドを実行します。
bin/magento
次のような、要求された ID X の web サイトが見つからなかったことを示すエラーが表示された場合は、web サイトおよびストアからデータベースに残っている設定が削除されています。
In WebsiteRepository.php line 110: The website with id X that was requested wasn't found. Verify the website and try again.
この MySQL クエリを実行して、web サイトが見つからないことを確認します。
select distinct scope_id from core_config_data where scope='websites' and scope_id not in (select website_id from store_website);
-
次の MySQL ステートメントを実行して、Web サイト設定から無効な行を削除します。
delete from core_config_data where scope='websites' and scope_id not in (select website_id from store_website);