由于内容暂存问题,所有页面均显示错误404

本文修复了Adobe Commerce内部部署和Adobe Commerce on Cloud基础架构问题,该问题导致您在访问任何店面页面或Commerce管理员时出现404错误。

受影响的产品和版本

  • Adobe Commerce内部部署2.2.x、2.3.x
  • 云基础架构上的Adobe Commerce 2.2.x、2.3.x

问题

NOTE
本文不适用于尝试预览暂存更新时出现404错误的情况。 如果您遇到此问题,请打开支持票证

访问任何店面页面或管理员会导致404错误(“糟糕,我们的错误……”页面),原因是使用内容暂存对商店内容资源执行计划更新操作后(对使用Magento_暂存模块计划的商店内容资源的更新)。 例如,您可能已删除了计划更新的产品,或删除了计划更新的结束日期。

商店内容资产包括:

  • 产品
  • 类别
  • 目录价格规则
  • 购物车价格规则
  • CMS页面
  • CMS块
  • 构件

下面的“原因”一节将讨论一些情形。

原因

数据库(DB)中的flag表包含指向staging_update表的无效链接。

该问题与内容暂存相关。 以下是两种特定情况;请注意,可能有更多情况会触发该问题。

方案1: ​正在删除商店内容资源,该资源:

  • 已计划内容暂存的更新
  • 更新具有结束日期(即更新的资产恢复到其先前版本的到期日期)
  • 更新的结束日期是过去的时间

同时,如果删除的资产没有计划更新的结束日期,则可能不会发生问题。

方案2: ​正在删除计划更新的结束日期/时间。

确定您的问题是否相关

要确定您遇到的问题是否为本文所述的问题,请运行以下数据库查询:

   SELECT f.flag_data >'$.current_version' as flag_version, (su.id IS NOT NULL) as update_exists
   -> FROM flag f
   -> LEFT JOIN staging_update su
   -> ON su.id = f.flag_data >'$.current_version'
   -> WHERE flag_code = 'staging';

如果查询返回的update_exists值为“0”的表,则数据库中存在指向staging_update表的无效链接,并且解决方案部分中描述的步骤将有助于解决此问题。 以下是update_exists值等于“0”的查询结果示例:

update_exists_0.png

如果查询返回的update_exists值为“1”的表或结果为空,则表示您的问题与暂存更新无关。 以下是update_exists值等于“1”的查询结果示例:

updates_exist_1.png

在这种情况下,您可以参阅Site Down Troubleshooter以了解故障排除想法。

解决方案

  1. 运行以下查询以删除指向staging_update表的无效链接:

    code language-sql
    DELETE FROM flag WHERE flag_code = 'staging';
    
  2. 等待cron作业运行(如果设置正确,最多可在五分钟后运行),或者如果未设置cron,请手动运行该作业。

该问题应在修复无效链接后立即解决。 如果问题仍然存在,请提交支持票证

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