404 カタログ価格ルール スケジュールの更新が実行されると、店舗フロントでエラーが発生します

この記事では、カタログ価格ルールのアップデートを作成し、その開始時間を後で編集した後、すべてのストアフロントページで 404 エラーが発生することに関連するAdobe Commerce 2.2.1 の既知の問題を修正するためのパッチと必要な手順を説明します。 問題を修正するには、パッチを適用する必要があります。

問題

ストアフロントページが使用できなくなり、404 エラーが返されます。 この問題は、アクティブなカタログ価格ルールの更新の期限が切れた後に表示されます。ただし、この更新の開始日が初回作成後に編集された場合に表示されます。

再現手順:

  1. Commerce管理者で、の下に新しいカタログ価格ルールを作成します。 Marketing > プロモーション > カタログ価格ルール.
  2. が含まれる カタログ価格ルール グリッド、クリック 編集、 新しい更新をスケジュールして設定 ステータス 対象: アクティブ。
  3. に移動します。 コンテンツ > コンテンツのステージング > ダッシュボード。
  4. 最近作成した更新を選択し、開始時刻を変更します。
  5. 変更を保存します。

期待される結果 :

更新開始日が有効になると、カタログ価格ルールが正常に適用されます。

実際の結果 :

更新開始日が有効になると、ストアフロント上のすべてのカタログと製品が使用できなくなります(404 エラーが返されます)。

解決策

カタログページを復元し、カタログ価格ルールの更新機能を完全に使用できるようにするには、パッチをインストールして手動と管理者の両方でルールを削除し、データベースの無効なリンクを修正する必要があります。 また、カタログ価格ルールを再作成する必要があります。

必要な手順の詳細を次に示します。

  1. パッチの適用.
  2. Commerce Admin で、(開始時刻が更新された)イシューに関連するカタログ価格ルールを削除します。 それには、のルールページを開きます Marketing > プロモーション > カタログ価格ルール ​を選択し、 ルールの削除.
  3. データベースにアクセスすると、関連するレコードがから手動で削除されます catalogrule テーブル。
  4. データベース内の無効なリンクを修正します。 を参照してください。 関連する段落 を参照してください。
  5. Commerce Admin で Marketing ​に移動します。 プロモーション > カタログ価格ルール ​を選択し、必要な設定を持つ新しいルールを作成します。
  6. の下のブラウザーキャッシュをクリアします システム > キャッシュ管理.
  7. cron ジョブが正しく設定され、正常に実行できることを確認します。

パッチ patch

パッチはこの記事に添付されています。 ダウンロードするには、記事の最後まで下にスクロールしてファイル名をクリックするか、次のリンクをクリックします。

MDVA-7392_EE_2.2.1_COMPOSER_v2.patch のダウンロード

互換性のあるAdobe Commerceのバージョン:

パッチは次のために作成されました。

  • Adobe Commerce 2.2.1

このパッチは、次のAdobe Commerceのバージョンとエディションとも互換性があります(ただし、問題が解決しない可能性があります)。

  • クラウドインフラストラクチャー上のAdobe Commerce 2.2.0 - 2.2.4
  • Adobe Commerce オンプレミス 2.2.0 および 2.2.2 ~ 2.2.4

パッチの適用方法

手順については、を参照してください Adobeが提供する composer パッチの適用方法 サポートナレッジベースで。

WARNING
データベース操作の前に、データベースバックアップを作成することを強くお勧めします。 また、最初に開発環境でクエリをテストすることをお勧めします。

への無効なリンクを含む行を修正するには、次の手順を実行します staging_update テーブル。

  1. 無効なリンクが staging_update テーブルがに存在する flag テーブル。 次の場合、これらはレコードになります flag_code=staging.

  2. から無効なバージョンを識別します flag 次のクエリを使用したテーブル:

    code language-sql
    SELECT flag_data FROM flag WHERE flag_code = 'staging';
    
  3. から staging_update テーブルで、現在の(無効な)バージョンより前の既存のバージョンを選択し、2 つ前の数値のバージョン値を取得します。 以前のバージョンがの最大バージョンである場合の状況を避けるために、以前のバージョンではなく上記の方法を使用します。 staging_update 適用できるテーブルで、再適用する必要があります。

    code language-sql
    SELECT id FROM staging_update WHERE id < %current_id% ORDER BY id DESC LIMIT 1, 1
    

    応答して取得するバージョンは、有効なバージョンです id.

  4. に無効なリンクがある行の flag テーブル、設定 flag_data 有効なバージョン id を含むデータへの値。 これにより、インデックス再作成手順のパフォーマンスを節約し、すべてのエンティティのインデックスを再作成するのを回避できます。

    code language-sql
    UPDATE flag SET flag_data=REPLACE(flag_data, '%invalid_id%', '%new_valid_id%') WHERE flag_code='staging';
    

例:

SELECT flag_data FROM flag WHERE flag_code = 'staging'; <code class="language-bash">Response < 2.2 version</code>
+-------------------------------------------------+
| flag_data                                       |
+-------------------------------------------------+
| a:1:{s:15:"current_version";s:10:"1490005140";} |
+-------------------------------------------------+
Response from 2.2 version
+-------------------------------------------------+
| flag_data                                       |
+-------------------------------------------------+
| {"current_version":"1490005140"} |
+-------------------------------------------------+
SELECT id FROM staging_update WHERE id < 1490005140 <code class="language-sql">ORDER BY id DESC LIMIT 1, 1</code>;
Response:
1490005138
UPDATE flag SET flag_data=REPLACE(flag_data, '1490005140', '1490005138') WHERE flag_code='staging';

添付ファイル

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