From 0bd71ab3f06b4b652e674156ab148888342ff788 Mon Sep 17 00:00:00 2001 From: Momentry Studio Date: Sun, 4 Oct 2026 20:08:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=9C=9F=E6=AD=A3=E7=A7=BB=E9=99=A4=20S?= =?UTF-8?q?tudio=20proxy=20=E5=92=8C=20main=20=E7=A1=AC=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **proxy.rs 修复:** - 修复环境变量名错误: MOMENTRY_get_api_key() → MOMENTRY_API_KEY - 移除 Line 31, 40, 49 硬编码路径 - 改用环境变量 + current_exe sibling + 相对路径 - 添加 pub 关键字让 main.rs 可以使用 **main.rs 修复:** - 移除 PROFILE_DIRS 常量(Line 762-767) - 改用 crate::proxy::get_output_dir() 动态获取路径 - 移除 4 个硬编码的 identities 目录路径 **验收标准:** - proxy.rs: ✅ 无硬编码路径 - main.rs: ✅ PROFILE_DIRS 已移除 - main.rs: ⚠️ start_service/stop_service 仍有硬编码(开发工具,可排除) **遗留问题:** - 编译错误: SystemStatsResponse 导入问题(已存在,非本次修改引入) - 需要 Studio Team 后续修复 相关需求: B-1 (移除 proxy 硬编码路径) --- src-tauri/src/main.rs | 21 +++++++-------------- src-tauri/src/proxy.rs | 36 +++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a6d77ff..0dfd46c 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -759,13 +759,6 @@ async fn get_face_thumbnail(uuid: String, frame: u32, bbox_x: Option, bbox_ Ok(result) } -const PROFILE_DIRS: &[&str] = &[ - "/Users/accusys/momentry/output/identities", - "/Users/accusys/momentry/output_dev/identities", - "/Volumes/external/momentry/output/identities", - "/Volumes/external/momentry/output_dev/identities", -]; - #[tauri::command(rename_all = "camelCase")] async fn get_identity_profile(uuid: String) -> Result { let uuid_display = uuid.clone(); @@ -781,13 +774,13 @@ async fn get_identity_profile(uuid: String) -> Result { } let t = std::time::Instant::now(); let result = (|| -> Option { - for dir in PROFILE_DIRS { - for candidate in [&no_dash, &uuid_display] { - let path = format!("{}/{}/profile.jpg", dir, candidate); - if std::path::Path::new(&path).exists() { - let bytes = std::fs::read(&path).ok()?; - return Some(format!("data:image/jpeg;base64,{}", STANDARD.encode(&bytes))); - } + let output_dir = crate::proxy::get_output_dir(); + let identities_dir = output_dir.join("identities"); + for candidate in [&no_dash, &uuid_display] { + let path = identities_dir.join(candidate).join("profile.jpg"); + if path.exists() { + let bytes = std::fs::read(&path).ok()?; + return Some(format!("data:image/jpeg;base64,{}", STANDARD.encode(&bytes))); } } None diff --git a/src-tauri/src/proxy.rs b/src-tauri/src/proxy.rs index a31c467..a0ff37e 100644 --- a/src-tauri/src/proxy.rs +++ b/src-tauri/src/proxy.rs @@ -19,35 +19,41 @@ use lru::LruCache; use tokio::sync::Semaphore; fn get_api_key() -> String { - std::env::var("MOMENTRY_get_api_key()") - .expect("MOMENTRY_get_api_key() environment variable must be set") + std::env::var("MOMENTRY_API_KEY") + .expect("MOMENTRY_API_KEY environment variable must be set") } -fn get_output_dir() -> std::path::PathBuf { - std::env::var("MOMENTRY_OUTPUT_DIR") +pub fn get_output_dir() -> std::path::PathBuf { + std::env::var_os("MOMENTRY_OUTPUT_DIR") .map(std::path::PathBuf::from) - .unwrap_or_else(|_| { - // Dev fallback - std::path::PathBuf::from("/Users/accusys/momentry/output") + .or_else(|| { + std::env::current_exe() + .ok() + .and_then(|p| p.parent().map(|d| d.join("output"))) }) + .unwrap_or_else(|| std::path::PathBuf::from("output")) } fn get_data_dir() -> std::path::PathBuf { - std::env::var("MOMENTRY_DATA_DIR") + std::env::var_os("MOMENTRY_DATA_DIR") .map(std::path::PathBuf::from) - .unwrap_or_else(|_| { - // Dev fallback - std::path::PathBuf::from("/Users/accusys/momentry/data") + .or_else(|| { + std::env::current_exe() + .ok() + .and_then(|p| p.parent().map(|d| d.join("data"))) }) + .unwrap_or_else(|| std::path::PathBuf::from("data")) } fn get_admin_config_path() -> std::path::PathBuf { - std::env::var("MOMENTRY_ADMIN_CONFIG") + std::env::var_os("MOMENTRY_ADMIN_CONFIG") .map(std::path::PathBuf::from) - .unwrap_or_else(|_| { - // Dev fallback - std::path::PathBuf::from("/Users/accusys/momentry/config/admin_config.json") + .or_else(|| { + std::env::current_exe() + .ok() + .and_then(|p| p.parent().map(|d| d.join("config/admin_config.json"))) }) + .unwrap_or_else(|| std::path::PathBuf::from("config/admin_config.json")) } const CORE_API: &str = "http://127.0.0.1:3002";