diff --git a/pipeline_service/work_env.py b/pipeline_service/work_env.py index 0047114..4be5c56 100644 --- a/pipeline_service/work_env.py +++ b/pipeline_service/work_env.py @@ -158,11 +158,12 @@ async def set_work_env(sor, owner_type: str, owner_id: str, mode: str, if not remote_config.get("remote_dir"): return {"ok": False, "error": "远程模式需要 remote_dir"} - # 查旧环境(用于判断是否需要迁移) + # 查旧环境(完整记录,迁移时需要用旧的远程配置) old_recs = await sor.sqlExe( - "SELECT mode FROM sd_work_envs WHERE owner_type=${t}$ AND owner_id=${o}$ LIMIT 1", + "SELECT * FROM sd_work_envs WHERE owner_type=${t}$ AND owner_id=${o}$ LIMIT 1", {"t": owner_type, "o": owner_id}) old_mode = getattr(old_recs[0], "mode", "local") if old_recs else "local" + old_env = _row_to_env(old_recs[0]) if old_recs else None # upsert from appPublic.uniqueID import getID @@ -191,8 +192,12 @@ async def set_work_env(sor, owner_type: str, owner_id: str, mode: str, # 触发迁移(模式切换 + 提供了 account_name 时) migrated = {"migrated": False} if account_name and old_mode != mode: - env = _row_to_env_from_dict(data) - migrated = await migrate_work_dir(account_name, old_mode, mode, env) + # remote → local 用旧的远程配置;local → remote 用新的远程配置 + if old_mode == "remote" and mode == "local": + migrate_env = old_env or _row_to_env_from_dict(data) + else: + migrate_env = _row_to_env_from_dict(data) + migrated = await migrate_work_dir(account_name, old_mode, mode, migrate_env) return {"ok": True, "mode": mode, "old_mode": old_mode, "migration": migrated}