feat: add hot reload when failed to load plugins (#5334)

* feat:add hot reload when failed to load plugins

* apply bot suggestions
This commit is contained in:
Waterwzy
2026-02-23 22:17:48 +08:00
committed by GitHub
parent 997b51102b
commit ecaec41208
2 changed files with 19 additions and 2 deletions
+17 -1
View File
@@ -529,8 +529,19 @@ class PluginManager:
requirements_path=requirements_path,
)
except Exception as e:
logger.error(traceback.format_exc())
error_trace = traceback.format_exc()
logger.error(error_trace)
logger.error(f"插件 {root_dir_name} 导入失败。原因:{e!s}")
fail_rec += f"加载 {root_dir_name} 插件时出现问题,原因 {e!s}\n"
self.failed_plugin_dict[root_dir_name] = {
"error": str(e),
"traceback": error_trace,
}
if path in star_map:
logger.info("失败插件依旧在插件列表中,正在清理...")
metadata = star_map.pop(path)
if metadata in star_registry:
star_registry.remove(metadata)
continue
# 检查 _conf_schema.json
@@ -784,6 +795,11 @@ class PluginManager:
"traceback": errors,
}
# 记录注册失败的插件名称,以便后续重载插件
if path in star_map:
logger.info("失败插件依旧在插件列表中,正在清理...")
metadata = star_map.pop(path)
if metadata in star_registry:
star_registry.remove(metadata)
# 清除 pip.main 导致的多余的 logging handlers
for handler in logging.root.handlers[:]:
+2 -1
View File
@@ -747,12 +747,13 @@ const showPluginInfo = (plugin) => {
const reloadPlugin = async (plugin_name) => {
try {
const res = await axios.post("/api/plugin/reload", { name: plugin_name });
await getExtensions();
if (res.data.status === "error") {
toast(res.data.message, "error");
return;
}
toast(tm("messages.reloadSuccess"), "success");
getExtensions();
//getExtensions();
} catch (err) {
toast(err, "error");
}