INNER CODE UNIT · Python
lifespan
ArcReel/ArcReel · server/app.py:344
async def lifespan(app: FastAPI):
"""应用生命周期管理"""
# Startup
# 安全红线检测:先父进程 env 净化,再 sandbox 工具可用性,再 docker 检测
assert_no_provider_secrets_in_environ()
sandbox_enabled = check_sandbox_available()
# detect_docker_environment 仅在 sandbox 可用平台有意义(Linux 路径探测);
# Windows 回退时跳过,避免无意义的文件系统调用。
is_docker = detect_docker_environment() if sandbox_enabled else False
logger.info("Sandbox runtime: enabled=%s docker=%s", sandbox_enabled, is_docker)
app.state.in_docker = is_docker
app.state.sandbox_enabled = sandbox_enabled
# 日志文件持久化:先一次性平移旧 app_data_dir()/logs,再挂 file handler。
# 顺序很重要——file handler 会 mkdir 新目录,提前挂会让 migrate 的 rename
# 撞到 "新旧都存在" 分支放弃迁移。
await asyncio.to_thread(migrate_legacy_log_dir)