解决dify安装插件失败后无限循环报错的问题
一、问题产生的原因及现象:
之前通过dify默认模板安装了一个“美股投资分析助手”的工作流,这工作流里自带了“雅虎财经”这个插件,因启用这个工作流时提示“雅虎财经”这个插件无效,就在“Marketplace”手动安装了,这一下跟捅了马蜂窝一样,这样“雅虎财经”的插件陷入“正在安装–安装失败–正在安装”的死循环。整出100安装失败的记录。
同时,导致docker中的插件容器“docker-plugin_daemon-1”疯狂抢夺系统资源,CPU、内存全部被拉满。
二、问题排除如下:
第一步:物理层清楚插件安装文件
进入D:\dify\docker\volumes\plugin_daemon\plugin_packages ,删除所有以 yahoo 开头或大小为0的 .zip/.tar.gz 文件
进入D:\dify\docker\volumes\plugin_daemon\plugin ,找到 yahoo 相关的文件夹并彻底删除
提示:为了保险,你可以直接清空 plugin_packages 文件夹,这不会影响已安装成功的插件。
第二步:数据库任务强制抹除
- 进入数据库:
docker exec -it docker-db_postgres-1 psql -U postgres -d dify
- 输入 “\l” 查看数据库列表,确认 dify 库存在
根据“ \l” 的反馈,Dify 的插件数据根本不在 dify 数据库里,而是存储在一个独立的数据库 dify_plugin 中
- 进入正确的数据库
在 psql 命令行(dify=# 提示符处)输入:
\c dify_plugin此时提示符应变为
dify_plugin=#。
- 查看与“yahoo”相关的插件记录
SELECT id, plugins, status FROM install_tasks WHERE plugins LIKE '%yahoo%';满屏幕的失败记录~
执行清理命令
在 dify_plugin=# 提示符下执行:
-- 彻底清空所有插件安装任务记录TRUNCATE TABLE install_tasks;-- 确认表已清空(应该返回 0 rows)SELECT count(*) FROM install_tasks;第三步:清理 Redis 缓存(非常重要)
SQL 只删除了“账本”,Redis 里可能还掐着“执行令”。在 PowerShell 执行:
docker exec -it docker-redis-1 redis-cli flushall第四步:服务层面:干净重启
# 重启插件守护进程docker restart docker-plugin_daemon-1# 为了保险,建议也重启下 API 容器docker restart docker-api-1三、为什么会出现这么多重复记录?
这就是典型的“任务僵尸化”:安装程序卡在下载环节(可能是网络问题),守护进程认为任务还没完,于是超时后报错,但由于 Dify 的自动重试机制或前端的反复请求,系统又开启了新的一轮安装,最终导致数据库被垃圾记录填满。
执行 TRUNCATE 后如果日志清净了,请千万别再去点那个 Yahoo 插件的安装按钮了!如果有其他插件需要安装,建议检查你的 Docker 网络是否能顺畅访问 GitHub。
夜雨聆风
