# Momentry Studio 硬编码路径问题分析与修复方案 **生成时间**: 2026-10-12 **目标环境**: m4promini **目标用户**: nextorageai **目标主目录**: /Users/nextorageai --- ## 🚨 问题分析 ### 1. 硬编码路径汇总 | 类别 | 文件 | 硬编码路径 | 影响 | |------|------|-----------|------| | **配置文件** | `config/admin_config.json` | 多个路径 | ❌ 严重 | | **Rust 代码** | `src-tauri/src/main.rs` | 10+ 处 | ❌ 严重 | | **文档** | 多个 .md 文件 | 100+ 处 | ⚠️ 中等 | | **脚本** | `start-proxy.sh` | 1 处 | ⚠️ 中等 | --- ### 2. 关键硬编码路径列表 #### 2.1 配置文件 (config/admin_config.json) ```json { "paths": { "output_dir": "/Users/accusys/momentry/output", // ❌ "backup_dir": "/Users/accusys/momentry/backup", // ❌ "scripts_dir": "/Users/accusys/momentry_core/scripts", // ❌ "python_path": "/opt/homebrew/bin/python3.11", // ✅ (可能不同) "ffmpeg_path": "/opt/homebrew/bin/ffmpeg" // ✅ (可能不同) }, "server": { "storage_root": "/Users/accusys/momentry/var/sftpgo/data" // ❌ } } ``` --- #### 2.2 Rust 代码 (src-tauri/src/main.rs) **Worker 管理**: ```rust // Line 1335: Stop worker .arg("sleep 0.5; WPID=$(cat /Users/accusys/momentry_core/logs/worker_3002.pid ...") // Line 1365: Start worker .arg("cd /Users/accusys/momentry_core && nohup bash run-worker-3002.sh ...") // Line 1375: Check worker status .arg("WPID=$(cat /Users/accusys/momentry_core/logs/worker_3002.pid ...") ``` **服务启动**: ```rust // Line 1385: MarkBase "mkdir -p /Users/accusys/markbase/data && cd /Users/accusys/markbase ..." // Line 1388: Core API "cd /Users/accusys/momentry_core && nohup bash run-server-3002.sh ..." // Line 1391: Studio Proxy "cd /Users/accusys/momentry_studio/src-tauri && nohup ./target/debug/momentry-proxy ..." // Line 1394: MarkBase Engine "cd /Users/accusys/MarkBaseEngine && nohup .build/debug/MarkBaseServer ..." // Line 1397: MarkBase SSH "cd /Users/accusys/markbase && nohup cargo run --bin markbase-core ..." // Line 1400: MarkBase SMB "cd /Users/accusys/markbase && nohup cargo run ... --root /Users/accusys/momentry/var/sftpgo/data ..." ``` **Fallback Home**: ```rust // Line 1479, 1504, 1516: Home directory fallback let home = dirs::home_dir().unwrap_or_else(|| std::path::PathBuf::from("/Users/accusys")); ``` --- ### 3. 问题严重性评估 #### 🔴 严重问题 (必须修复) 1. **配置文件硬编码** - `config/admin_config.json` - 影响: Core API 无法找到输出目录、脚本目录 - 优先级: P0 2. **Rust 代码硬编码** - `main.rs` - 影响: Worker 管理、服务启动/停止失败 - 优先级: P0 3. **服务管理命令** - 路径硬编码 - 影响: Admin 页面服务控制失效 - 优先级: P0 #### 🟡 中等问题 (建议修复) 4. **文档中的路径** - 示例代码 - 影响: 文档可读性、示例执行 - 优先级: P1 5. **脚本路径** - `start-proxy.sh` - 影响: 启动脚本执行 - 优先级: P1 --- ## 🛠️ 修复方案 ### 方案 1: 环境变量 + 动态路径 (推荐) #### 优点 - ✅ 完全动态,无需修改代码 - ✅ 支持多环境部署 - ✅ 配置集中管理 #### 实施步骤 **步骤 1: 修改 admin_config.json** ```json { "paths": { "output_dir": "${MOMENTRY_ROOT}/output", "backup_dir": "${MOMENTRY_ROOT}/backup", "scripts_dir": "${MOMENTRY_CORE_ROOT}/scripts", "python_path": "${PYTHON_PATH}", "ffmpeg_path": "${FFMPEG_PATH}" }, "server": { "storage_root": "${STORAGE_ROOT}" } } ``` **步骤 2: 创建环境变量文件** `.env.m4promini`: ```env # Momentry Roots MOMENTRY_ROOT=/Users/nextorageai/momentry MOMENTRY_CORE_ROOT=/Users/nextorageai/momentry_core MARKBASE_ROOT=/Users/nextorageai/markbase # Storage STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data OUTPUT_DIR=/Users/nextorageai/momentry/output BACKUP_DIR=/Users/nextorageai/momentry/backup # Binaries PYTHON_PATH=/opt/homebrew/bin/python3.11 FFMPEG_PATH=/opt/homebrew/bin/ffmpeg # Studio MOMENTRY_STUDIO_ROOT=/Users/nextorageai/momentry_studio MOMENTRY_DATA_DIR=/Users/nextorageai/momentry_studio/data/users ``` **步骤 3: 修改 Rust 代码** ```rust // 替换硬编码路径为环境变量 use std::env; fn get_momentry_core_root() -> String { env::var("MOMENTRY_CORE_ROOT") .unwrap_or_else(|_| { dirs::home_dir() .map(|h| format!("{}/momentry_core", h.display())) .unwrap_or_else(|| "/Users/accusys/momentry_core".to_string()) }) } // 使用示例 .arg(format!("cd {} && nohup bash run-worker-3002.sh ...", get_momentry_core_root())) ``` --- ### 方案 2: 配置文件 + 相对路径 (次选) #### 优点 - ✅ 简单易实施 - ✅ 减少环境变量依赖 #### 实施步骤 **步骤 1: 创建 deployment.conf** ```conf [m4promini] MOMENTRY_ROOT=/Users/nextorageai/momentry MOMENTRY_CORE_ROOT=/Users/nextorageai/momentry_core MARKBASE_ROOT=/Users/nextorageai/markbase STUDIO_ROOT=/Users/nextorageai/momentry_studio STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data ``` **步骤 2: 启动时加载配置** ```rust use std::fs; fn load_deployment_config() -> HashMap { let config_path = std::env::current_exe() .unwrap() .parent() .unwrap() .join("deployment.conf"); // Parse conf file... } ``` --- ### 方案 3: 安装脚本替换 (临时方案) #### 优点 - ✅ 无需修改代码 - ✅ 快速部署 #### 实施步骤 **创建 install_m4promini.sh**: ```bash #!/bin/bash # Momentry Studio - m4promini Installation Script TARGET_USER="nextorageai" TARGET_HOME="/Users/nextorageai" STUDIO_ROOT="${TARGET_HOME}/momentry_studio" echo "=== Installing Momentry Studio for m4promini ===" # 1. Clone repository cd ${TARGET_HOME} git clone momentry_studio cd momentry_studio # 2. Update config file sed -i.bak \ -e "s|/Users/accusys/momentry|${TARGET_HOME}/momentry|g" \ -e "s|/Users/accusys/momentry_core|${TARGET_HOME}/momentry_core|g" \ -e "s|/Users/accusys/markbase|${TARGET_HOME}/markbase|g" \ config/admin_config.json # 3. Update Rust code sed -i.bak \ -e "s|/Users/accusys/momentry_core|${TARGET_HOME}/momentry_core|g" \ -e "s|/Users/accusys/momentry_studio|${TARGET_HOME}/momentry_studio|g" \ -e "s|/Users/accusys/markbase|${TARGET_HOME}/markbase|g" \ -e "s|/Users/accusys|${TARGET_HOME}|g" \ src-tauri/src/main.rs # 4. Build npm install npm run build cd src-tauri cargo build --release cd .. echo "✅ Installation complete" ``` --- ## 📋 修复清单 ### 必须修复 (P0) - [ ] **config/admin_config.json** - 替换为环境变量或相对路径 - [ ] **main.rs** - Worker 管理命令 (3 处) - [ ] **main.rs** - 服务启动命令 (6 处) - [ ] **main.rs** - Home 目录 fallback (3 处) - [ ] **start-proxy.sh** - 工作目录路径 ### 建议修复 (P1) - [ ] **README.md** - 文档中的示例路径 - [ ] **RELEASE_v0.1.0_INSTALLATION_GUIDE.md** - 安装路径示例 - [ ] **AGENTS.md** - 文档中的路径引用 --- ## 🚀 推荐实施方案 **推荐**: 方案 1 (环境变量 + 动态路径) **理由**: 1. 最灵活,支持多环境部署 2. 符合 12-factor app 原则 3. 便于 CI/CD 集成 4. 无需修改代码即可适应不同环境 **实施步骤**: 1. **创建环境变量模板** (`.env.template`) 2. **修改 config/admin_config.json** (支持变量替换) 3. **修改 main.rs** (使用环境变量) 4. **创建部署脚本** (自动配置环境) 5. **更新文档** (说明环境变量配置) --- ## 📝 环境变量清单 ### 必需环境变量 ```bash # 根目录 export MOMENTRY_ROOT=/Users/nextorageai/momentry export MOMENTRY_CORE_ROOT=/Users/nextorageai/momentry_core export MARKBASE_ROOT=/Users/nextorageai/markbase export MOMENTRY_STUDIO_ROOT=/Users/nextorageai/momentry_studio # 存储 export STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data export OUTPUT_DIR=/Users/nextorageai/momentry/output export BACKUP_DIR=/Users/nextorageai/momentry/backup # 数据库 export MOMENTRY_DATA_DIR=/Users/nextorageai/momentry_studio/data/users # 可选 export PYTHON_PATH=/opt/homebrew/bin/python3.11 export FFMPEG_PATH=/opt/homebrew/bin/ffmpeg ``` --- ## ⚠️ 注意事项 1. **环境变量优先级** - 环境变量 > 配置文件 > 默认值 - 使用 `unwrap_or_else()` 提供合理 fallback 2. **路径验证** - 启动时检查关键路径是否存在 - 提供清晰的错误提示 3. **向后兼容** - 保留 `/Users/accusys` 作为 fallback - 但优先使用环境变量 4. **文档更新** - 更新所有示例路径 - 添加环境变量配置说明 --- ## 🔗 相关文档 - `/Users/accusys/momentry_studio/RELEASE_v0.1.0_INSTALLATION_GUIDE.md` - `/Users/accusys/momentry_studio/build_release.sh` - `/Users/accusys/momentry_studio/AGENTS.md` --- **修复优先级**: P0 (紧急) **预计工作量**: 2-3 小时 **影响范围**: 配置文件、Rust 代码、部署流程