404执行目录价格规则计划更新后商店前端出错
本文介绍了在创建目录价格规则更新并稍后编辑其开始时间后,修复与在所有商店主页中出现404错误相关的已知Adobe Commerce 2.2.1问题的补丁程序和所需步骤。 要解决此问题,您需要应用修补程序。
问题
店面页面不可用,返回404错误。 如果初始创建后编辑了此更新的开始日期,则在活动目录价格规则更新到期后会出现问题。
重现步骤:
- 在Commerce管理员中,在 营销 > 促销活动 > 目录价格规则 下创建新的目录价格规则。
- 在 目录价格规则 网格中,单击 编辑, 计划新的更新并将 状态 设置为 活动。
- 导航到 内容 > 内容暂存 > 仪表板。
- 选择最近创建的更新并更改其开始时间。
- 保存更改。
预期的结果 :
当“更新”起始日期生效时,目录价格规则将应用成功。
实际结果 :
当更新开始日期生效时,店面中的所有目录和产品将变得不可用,并返回404错误。
解决方案
要恢复目录页并能够完全使用目录价格规则更新功能,您需要安装修补程序,手动和管理员中删除规则,并修复数据库中的无效链接。 您还需要重新创建目录价格规则。
以下是所需步骤的详细说明:
Patch 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提供的编辑器修补程序。
修复指向数据库中暂存的无效链接 fix_links
执行以下步骤来修复具有指向staging_update
表的无效链接的行。
-
检查
flag
表中是否存在指向staging_update
表的无效链接。 这些是flag_code=staging
的记录。 -
使用以下查询识别
flag
表中的无效版本:code language-sql SELECT flag_data FROM flag WHERE flag_code = 'staging';
-
从
staging_update
表中,选择小于当前(无效)版本的现有版本,并获取返回两个数字的版本值。 您采用此版本,而不是以前的版本,以避免出现上一个版本是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';