问题: - 100+ 处硬编码路径 /Users/accusys - 配置文件 (admin_config.json) 无法适应新环境 - Rust 代码 (main.rs) 中 10+ 处路径硬编码 - 服务启动/停止命令依赖固定路径 影响: - 无法在 m4promini (/Users/nextorageai) 上部署 - Admin 页面服务控制失效 - Worker 管理失败 解决方案: 1. 文档: docs/DEPLOYMENT_PATH_ISSUES.md - 详细分析所有硬编码路径 - 提供 3 种修复方案 - 环境变量优先级建议 2. 脚本: fix_paths_for_m4promini.sh - 自动替换所有硬编码路径 - 创建备份 - 生成环境变量模板 - 创建部署说明 目标环境: - 用户: nextorageai - 主目录: /Users/nextorageai - 项目目录: /Users/nextorageai/momentry_studio 下一步: 1. 在 m4promini 上运行 fix_paths_for_m4promini.sh 2. 配置环境变量 (.env) 3. 构建项目 4. 启动服务
8.9 KiB
8.9 KiB
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)
{
"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 管理:
// 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 ...")
服务启动:
// 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:
// Line 1479, 1504, 1516: Home directory fallback
let home = dirs::home_dir().unwrap_or_else(|| std::path::PathBuf::from("/Users/accusys"));
3. 问题严重性评估
🔴 严重问题 (必须修复)
-
配置文件硬编码 -
config/admin_config.json- 影响: Core API 无法找到输出目录、脚本目录
- 优先级: P0
-
Rust 代码硬编码 -
main.rs- 影响: Worker 管理、服务启动/停止失败
- 优先级: P0
-
服务管理命令 - 路径硬编码
- 影响: Admin 页面服务控制失效
- 优先级: P0
🟡 中等问题 (建议修复)
-
文档中的路径 - 示例代码
- 影响: 文档可读性、示例执行
- 优先级: P1
-
脚本路径 -
start-proxy.sh- 影响: 启动脚本执行
- 优先级: P1
🛠️ 修复方案
方案 1: 环境变量 + 动态路径 (推荐)
优点
- ✅ 完全动态,无需修改代码
- ✅ 支持多环境部署
- ✅ 配置集中管理
实施步骤
步骤 1: 修改 admin_config.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:
# 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 代码
// 替换硬编码路径为环境变量
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
[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: 启动时加载配置
use std::fs;
fn load_deployment_config() -> HashMap<String, String> {
let config_path = std::env::current_exe()
.unwrap()
.parent()
.unwrap()
.join("deployment.conf");
// Parse conf file...
}
方案 3: 安装脚本替换 (临时方案)
优点
- ✅ 无需修改代码
- ✅ 快速部署
实施步骤
创建 install_m4promini.sh:
#!/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 <repo_url> 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 (环境变量 + 动态路径)
理由:
- 最灵活,支持多环境部署
- 符合 12-factor app 原则
- 便于 CI/CD 集成
- 无需修改代码即可适应不同环境
实施步骤:
- 创建环境变量模板 (
.env.template) - 修改 config/admin_config.json (支持变量替换)
- 修改 main.rs (使用环境变量)
- 创建部署脚本 (自动配置环境)
- 更新文档 (说明环境变量配置)
📝 环境变量清单
必需环境变量
# 根目录
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
⚠️ 注意事项
-
环境变量优先级
- 环境变量 > 配置文件 > 默认值
- 使用
unwrap_or_else()提供合理 fallback
-
路径验证
- 启动时检查关键路径是否存在
- 提供清晰的错误提示
-
向后兼容
- 保留
/Users/accusys作为 fallback - 但优先使用环境变量
- 保留
-
文档更新
- 更新所有示例路径
- 添加环境变量配置说明
🔗 相关文档
/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 代码、部署流程