You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento2.4.4执行setup:upgrade时数据补丁重复执行报错问询

Magento 2.4.4 中 Data 补丁重复执行触发的原因及解决办法

Data 补丁设计上确实仅执行一次,但出现重复触发的情况,通常是以下几个原因导致的:

1. 补丁类未正确实现必填方法

Magento 的 Data 补丁要求必须实现 getDependencies() 和 getAliases() 两个方法(即使返回空数组)。如果你的 CustomAttribute1 补丁类缺失这两个方法,或者返回值不符合规范,系统无法在 patch_list 表中正确标记补丁状态,导致每次执行 setup:upgrade 都会尝试重新执行。

检查补丁类代码,确保包含类似逻辑:

public function getDependencies()
{
    return [];
}

public function getAliases()
{
    return [];
}

2. patch_list 表中无该补丁的执行记录

Magento 依赖 patch_list 数据库表跟踪所有已执行的补丁。如果这条补丁的记录被误删除,或者第一次执行时失败后未正确写入记录,系统会默认补丁从未执行过,进而再次触发执行。

解决步骤:

  1. 登录数据库,执行查询确认记录是否存在:
    SELECT * FROM patch_list WHERE patch_name = 'GraphQL\\Assignment\\Setup\\Patch\\Data\\CustomAttribute1';
    
  2. 如果无记录,且确认补丁已经成功执行过数据变更,手动插入记录:
    INSERT INTO patch_list (patch_name, patch_type, status, created_at) 
    VALUES ('GraphQL\\Assignment\\Setup\\Patch\\Data\\CustomAttribute1', 'data', 'applied', NOW());
    

3. 补丁类文件被修改

Magento 会计算补丁类文件的哈希值并存入 patch_list 表。如果后续修改了补丁文件的内容(哪怕只是注释、空格调整),哈希值会发生变化,系统会将其识别为新补丁,重新执行。

规范做法:Data 补丁是一次性执行的,如需调整数据逻辑,应创建新的 Data 补丁类,而非修改已执行过的补丁文件。

4. 模块版本号与补丁逻辑不匹配

如果在不更新模块 module.xml 版本号的情况下修改了补丁逻辑,Magento 的模块升级机制可能误判,触发补丁重新执行。

注意:模块版本号变更与补丁执行强相关,如需迭代数据操作,应新增补丁并同步更新模块版本。

5. 缓存或生成文件异常

Magento 的配置缓存、generated 目录中的补丁类缓存如果未及时清理,可能导致系统读取补丁状态时出现异常,误认为补丁未执行。

执行以下命令清理缓存和生成文件:

bin/magento cache:clean
bin/magento cache:flush
rm -rf generated/* var/cache/* var/page_cache/*

内容的提问来源于stack exchange,提问作者Ritesh Rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:20:46