404執行型錄價格規則排程更新後,商店前端發生錯誤

本文提供修補程式和必要步驟,以修正目錄價格規則更新建立且稍後編輯其開始時間後,與在所有商店正面頁面上取得404錯誤相關的已知Adobe Commerce 2.2.1問題。 若要修正問題,您必須套用修補程式。

問題

店面頁面無法使用,返回404錯誤。 若此更新的開始日期是在初始建立後進行編輯,則問題會在使用中型錄價格規則更新到期後出現。

要再現的步驟

  1. 在Commerce管理員中,在​ 行銷 > 促銷活動 > 目錄價格規則 ​下建立新的目錄價格規則。
  2. 在​ 目錄價格規則 ​格線中,按一下​ 編輯, ​排程新的更新,並將​ 狀態 ​設定為​ 作用中。
  3. 導覽至​ 內容 > 內容暫存 > 儀表板。
  4. 選取最近建立的更新並變更其開始時間。
  5. 儲存變更。

預期結果

當「更新」開始日期生效時,型錄價格規則即會成功套用。

實際結果

當更新開始日期生效時,店面上的所有目錄和產品將變為無法使用,並傳回404錯誤。

解決方案

若要還原目錄頁面,並完全使用目錄價格規則更新功能,您必須安裝修正程式、手動刪除規則並刪除管理員中的規則,以及修正資料庫中的無效連結。 您也需要重新建立型錄價格規則。

以下是所需步驟的詳細說明:

  1. 套用修補程式
  2. 在「Commerce管理員」中,刪除與問題(其開始時間已更新)相關的目錄價格規則。 若要這麼做,請開啟​ 行銷 > 促銷活動 > 目錄價格規則 ​下的規則頁面,然後按一下​ 刪除規則
  3. 存取資料庫手動從catalogrule資料表中刪除相關記錄。
  4. 修正資料庫中的無效連結。 如需詳細資訊,請參閱相關段落
  5. 在Commerce管理員的​ 行銷 ​底下,前往​ 促銷活動 > 目錄價格規則,並使用必要的設定建立新規則。
  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提供的撰寫器修補程式。

WARNING
我們強烈建議在任何資料庫操作前先建立資料庫備份。 我們也建議先在開發環境中測試查詢。

請採取下列步驟來修正含有無效連結至staging_update表格的資料列。

  1. 檢查flag資料表中是否存在staging_update資料表的無效連結。 這些是flag_code=staging的記錄。

  2. 使用以下查詢識別flag資料表中的無效版本:

    code language-sql
    SELECT flag_data FROM flag WHERE flag_code = 'staging';
    
  3. staging_update表格中,選取小於目前(無效)版本的現有版本,並取得傳回兩個數字的版本值。 您採取此方式,而非先前版本,以避免先前版本是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