fix: 真正移除 Studio proxy 和 main 硬编码路径

**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 硬编码路径)
This commit is contained in:
2026-10-04 20:08:29 +08:00
parent 40b804c0d1
commit 0bd71ab3f0
2 changed files with 28 additions and 29 deletions

View File

@@ -759,13 +759,6 @@ async fn get_face_thumbnail(uuid: String, frame: u32, bbox_x: Option<f64>, 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<String, String> {
let uuid_display = uuid.clone();
@@ -781,15 +774,15 @@ async fn get_identity_profile(uuid: String) -> Result<String, String> {
}
let t = std::time::Instant::now();
let result = (|| -> Option<String> {
for dir in PROFILE_DIRS {
let output_dir = crate::proxy::get_output_dir();
let identities_dir = output_dir.join("identities");
for candidate in [&no_dash, &uuid_display] {
let path = format!("{}/{}/profile.jpg", dir, candidate);
if std::path::Path::new(&path).exists() {
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
})();
match result {

View File

@@ -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";