404 カタログ価格ルール スケジュールの更新が実行されると、店舗フロントでエラーが発生します
この記事では、カタログ価格ルールのアップデートを作成し、その開始時間を後で編集した後、すべてのストアフロントページで 404 エラーが発生することに関連するAdobe Commerce 2.2.1 の既知の問題を修正するためのパッチと必要な手順を説明します。 問題を修正するには、パッチを適用する必要があります。
問題
ストアフロントページが使用できなくなり、404 エラーが返されます。 この問題は、アクティブなカタログ価格ルールの更新の期限が切れた後に表示されます。ただし、この更新の開始日が初回作成後に編集された場合に表示されます。
再現手順 :
- Commerce管理者で、マーケティング/プロモーション/カタログ価格ルール の下に新しいカタログ価格ルールを作成します。
- カタログ価格ルール グリッドで、「編集 をクリックして新しい更新をスケジュールし、ステータス を アクティブ に設定します。
- コンテンツ/コンテンツのステージング/ダッシュボード に移動します。
- 最近作成した更新を選択し、開始時刻を変更します。
- 変更を保存します。
期待される結果 :
更新開始日が有効になると、カタログ価格ルールが正常に適用されます。
実際の結果 :
更新開始日が有効になると、ストアフロント上のすべてのカタログと製品が使用できなくなります(404 エラーが返されます)。
解決策
カタログページを復元し、カタログ価格ルールの更新機能を完全に使用できるようにするには、パッチをインストールして手動と管理者の両方でルールを削除し、データベースの無効なリンクを修正する必要があります。 また、カタログ価格ルールを再作成する必要があります。
必要な手順の詳細を次に示します。
- パッチを適用します。
- Commerce Admin で、(開始時刻が更新された)イシューに関連するカタログ価格ルールを削除します。 そのためには、マーケティング/プロモーション/カタログ価格ルール の下のルールページを開き、「ルールを削除」をクリックします。
- データベースにアクセスすると、
catalogrule
テーブルから関連レコードが手動で削除されます。 - データベース内の無効なリンクを修正します。 詳しくは、 関連する段落を参照してください。
- Commerce管理者の マーケティング で、プロモーション/カタログ価格ルール に移動し、必要な設定を含む新しいルールを作成します。
- システム/キャッシュ管理 の下でブラウザーキャッシュをクリアします。
- cron ジョブが正しく設定され、正常に実行できることを確認します。
パッチ 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 パッチの適用方法を参照してください。
DB のステージングへの無効なリンクを修正 fix_links
staging_update
テーブルへの無効なリンクを含む行を修正するには、次の手順を実行します。
-
staging_update
テーブルへの無効なリンクがflag
テーブルに存在するかどうかを確認します。 これらは、flag_code=staging
の場所のレコードになります。 -
次のクエリを使用して、
flag
テーブルから無効なバージョンを特定します。code language-sql SELECT flag_data FROM flag WHERE flag_code = 'staging';
-
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
です。 -
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';