fix(plugins_initializer): 优化插件恢复的容错处理

- 添加单个插件恢复失败的异常处理,使用 continue 跳过
- 确保单个插件恢复失败不影响其他插件继续恢复
This commit is contained in:
Attente
2025-06-12 07:56:44 +08:00
parent 8ed87294e2
commit eac4d703c7
+24 -25
View File
@@ -138,26 +138,25 @@ def restore_plugins():
if not SystemUtils.is_docker(): if not SystemUtils.is_docker():
return return
try: # 使用绝对路径确保准确性
# 使用绝对路径确保准确性 plugins_dir = settings.ROOT_PATH / "app" / "plugins"
plugins_dir = settings.ROOT_PATH / "app" / "plugins" backup_dir = settings.CONFIG_PATH / "plugins_backup"
backup_dir = settings.CONFIG_PATH / "plugins_backup"
if not backup_dir.exists(): if not backup_dir.exists():
logger.info("插件备份目录不存在,跳过恢复") logger.info("插件备份目录不存在,跳过恢复")
return return
# 系统被重置才恢复插件 # 系统被重置才恢复插件
if SystemHelper().is_system_reset(): if SystemHelper().is_system_reset():
# 确保插件目录存在 # 确保插件目录存在
plugins_dir.mkdir(parents=True, exist_ok=True) plugins_dir.mkdir(parents=True, exist_ok=True)
# 遍历备份目录,恢复所有内容
restored_count = 0
for item in backup_dir.iterdir():
target_path = plugins_dir / item.name
# 遍历备份目录,恢复所有内容
restored_count = 0
for item in backup_dir.iterdir():
target_path = plugins_dir / item.name
try:
# 如果是目录,且目录内有内容 # 如果是目录,且目录内有内容
if item.is_dir() and any(item.iterdir()): if item.is_dir() and any(item.iterdir()):
if target_path.exists(): if target_path.exists():
@@ -170,15 +169,15 @@ def restore_plugins():
shutil.copy2(item, target_path) shutil.copy2(item, target_path)
logger.info(f"已恢复插件文件: {item.name}") logger.info(f"已恢复插件文件: {item.name}")
restored_count += 1 restored_count += 1
except Exception as e:
logger.error(f"恢复插件 {item.name} 时发生错误: {str(e)}")
continue
logger.info(f"插件恢复完成,共恢复 {restored_count} 个项目") logger.info(f"插件恢复完成,共恢复 {restored_count} 个项目")
# 删除备份目录
try:
shutil.rmtree(backup_dir)
logger.info(f"已删除插件备份目录: {backup_dir}")
except Exception as e:
logger.warning(f"删除备份目录失败: {str(e)}")
# 删除备份目录
try:
shutil.rmtree(backup_dir)
logger.info(f"已删除插件备份目录: {backup_dir}")
except Exception as e: except Exception as e:
logger.error(f"插件恢复失败: {str(e)}") logger.warning(f"删除备份目录失败: {str(e)}")