From eac4d703c72280f4cc3132237c233f1b78e49e17 Mon Sep 17 00:00:00 2001 From: Attente <19653207+wikrin@users.noreply.github.com> Date: Thu, 12 Jun 2025 07:56:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(plugins=5Finitializer):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=8F=92=E4=BB=B6=E6=81=A2=E5=A4=8D=E7=9A=84=E5=AE=B9?= =?UTF-8?q?=E9=94=99=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加单个插件恢复失败的异常处理,使用 continue 跳过 - 确保单个插件恢复失败不影响其他插件继续恢复 --- app/startup/plugins_initializer.py | 67 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/app/startup/plugins_initializer.py b/app/startup/plugins_initializer.py index 4b2f7522..e79a3bf9 100644 --- a/app/startup/plugins_initializer.py +++ b/app/startup/plugins_initializer.py @@ -94,24 +94,24 @@ def backup_plugins(): # 使用绝对路径确保准确性 plugins_dir = settings.ROOT_PATH / "app" / "plugins" backup_dir = settings.CONFIG_PATH / "plugins_backup" - + if not plugins_dir.exists(): logger.info("插件目录不存在,跳过备份") return - + # 确保备份目录存在 backup_dir.mkdir(parents=True, exist_ok=True) - + # 需要排除的文件和目录 exclude_items = {"__init__.py", "__pycache__", ".DS_Store"} - + # 遍历插件目录,备份除排除项外的所有内容 for item in plugins_dir.iterdir(): if item.name in exclude_items: continue - + target_path = backup_dir / item.name - + # 如果是目录 if item.is_dir(): if target_path.exists(): @@ -122,9 +122,9 @@ def backup_plugins(): elif item.is_file(): shutil.copy2(item, target_path) logger.info(f"已备份插件文件: {item.name}") - + logger.info(f"插件备份完成,备份位置: {backup_dir}") - + except Exception as e: logger.error(f"插件备份失败: {str(e)}") @@ -138,26 +138,25 @@ def restore_plugins(): if not SystemUtils.is_docker(): return - try: - # 使用绝对路径确保准确性 - plugins_dir = settings.ROOT_PATH / "app" / "plugins" - backup_dir = settings.CONFIG_PATH / "plugins_backup" - - if not backup_dir.exists(): - logger.info("插件备份目录不存在,跳过恢复") - return + # 使用绝对路径确保准确性 + plugins_dir = settings.ROOT_PATH / "app" / "plugins" + backup_dir = settings.CONFIG_PATH / "plugins_backup" - # 系统被重置才恢复插件 - if SystemHelper().is_system_reset(): + if not backup_dir.exists(): + logger.info("插件备份目录不存在,跳过恢复") + return - # 确保插件目录存在 - plugins_dir.mkdir(parents=True, exist_ok=True) + # 系统被重置才恢复插件 + if SystemHelper().is_system_reset(): - # 遍历备份目录,恢复所有内容 - restored_count = 0 - for item in backup_dir.iterdir(): - target_path = plugins_dir / item.name + # 确保插件目录存在 + plugins_dir.mkdir(parents=True, exist_ok=True) + # 遍历备份目录,恢复所有内容 + 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 target_path.exists(): @@ -170,15 +169,15 @@ def restore_plugins(): shutil.copy2(item, target_path) logger.info(f"已恢复插件文件: {item.name}") restored_count += 1 + except Exception as e: + logger.error(f"恢复插件 {item.name} 时发生错误: {str(e)}") + continue - logger.info(f"插件恢复完成,共恢复 {restored_count} 个项目") - - # 删除备份目录 - try: - shutil.rmtree(backup_dir) - logger.info(f"已删除插件备份目录: {backup_dir}") - except Exception as e: - logger.warning(f"删除备份目录失败: {str(e)}") - + logger.info(f"插件恢复完成,共恢复 {restored_count} 个项目") + + # 删除备份目录 + try: + shutil.rmtree(backup_dir) + logger.info(f"已删除插件备份目录: {backup_dir}") except Exception as e: - logger.error(f"插件恢复失败: {str(e)}") + logger.warning(f"删除备份目录失败: {str(e)}")