diff --git a/AGENTS.md b/AGENTS.md index dde43ed..9541fb6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -407,6 +407,40 @@ cargo run --features player --bin momentry_player -- -o - `MOMENTRY_PYTHON_PATH` - Python path (default: `/opt/homebrew/bin/python3.11`) - `MOMENTRY_SCRIPTS_DIR` - Scripts directory +### Critical Variables for Startup Scripts + +**IMPORTANT**: Startup scripts must explicitly `export` these variables for Python subprocess inheritance. + +#### Production (3002) +Required exports in `run-server-3002.sh` and `run-worker-3002.sh`: +```bash +export MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output +export DATABASE_SCHEMA=public +export MOMENTRY_REDIS_PREFIX=momentry: +export MOMENTRY_SERVER_PORT=3002 +``` + +#### Playground (3003) +Required exports in `run-server-3003.sh`: +```bash +export DATABASE_SCHEMA=dev +export MOMENTRY_SERVER_PORT=3003 +export MOMENTRY_REDIS_PREFIX=momentry_dev: +export MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output_dev +``` + +#### Why This Matters +- Rust process loads `.env` via `dotenv` +- Python subprocess inherits environment from Rust process +- Without explicit `export`, dotenv variables are only available inside Rust +- Python scripts like `store_traced_faces.py` will use hardcoded defaults if not exported + +#### Config Directory +Environment-specific configuration files: +- `config/production.env` - Production-specific variables +- `config/development.env` - Development-specific variables +- `config/test.env` - Test environment (if needed) + ### Processor Timeouts - `MOMENTRY_ASR_TIMEOUT` - ASR timeout in seconds (default: 3600) - `MOMENTRY_CUT_TIMEOUT` - CUT timeout in seconds (default: 3600) @@ -625,6 +659,16 @@ git push origin main pg_dump -U accusys -d momentry --schema-only > "$RELEASE_DIR/schema_v0.X.X.sql" ``` +5. **驗證環境變數配置** + - ✅ Startup scripts export all required environment variables + - ✅ Python scripts don't use hardcoded paths + - ✅ Environment variables consistent across: + - `.env` / `.env.development` + - Startup script `export` + - Python script `os.environ.get()` + - ✅ Config directory has environment-specific files + - ✅ AGENTS.md documents all required exports + ### 重要性 - 避免 release binary 與 current source code 不一致 - 方便追蹤特定 release 的程式碼狀態 diff --git a/config/development.env b/config/development.env new file mode 100644 index 0000000..9f3406d --- /dev/null +++ b/config/development.env @@ -0,0 +1,47 @@ +# Development Environment Configuration +# Used by: momentry_playground binary on port 3003 +# +# This file extracts development-specific variables from .env.development +# Startup scripts must export these variables for Python subprocess inheritance + +# Server Configuration +MOMENTRY_SERVER_PORT=3003 +MOMENTRY_REDIS_PREFIX=momentry_dev: + +# Database Schema +DATABASE_SCHEMA=dev + +# Output Directory (CRITICAL for Python scripts) +MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output_dev + +# Backup Directory +MOMENTRY_BACKUP_DIR=/Users/accusys/momentry/backup/momentry_dev + +# Storage +MOMENTRY_SFTP_ROOT=/Users/accusys/momentry/var/sftpgo/data/demo/ + +# Python Path (venv for development) +MOMENTRY_PYTHON_PATH=/Users/accusys/momentry_core/venv/bin/python +MOMENTRY_SCRIPTS_DIR=/Users/accusys/momentry_core/scripts + +# Logging +RUST_LOG=info +MOMENTRY_LOG_LEVEL=info + +# Worker Configuration +MOMENTRY_WORKER_ENABLED=true +MOMENTRY_MAX_CONCURRENT=6 +MOMENTRY_POLL_INTERVAL=10 +MOMENTRY_WORKER_BATCH_SIZE=5 + +# TMDb Integration +TMDB_API_KEY=e9cde52197f6f8df4d9db99da93db1fb +MOMENTRY_TMDB_PROBE_ENABLED=true + +# LLM Configuration +MOMENTRY_LLM_SUMMARY_URL=http://127.0.0.1:8000/v1/chat/completions +MOMENTRY_LLM_SUMMARY_MODEL=gemma-4-E4B +MOMENTRY_LLM_SUMMARY_ENABLED=true + +# Embedding +MOMENTRY_EMBED_URL=http://localhost:11436 \ No newline at end of file diff --git a/config/production.env b/config/production.env new file mode 100644 index 0000000..fa1c22e --- /dev/null +++ b/config/production.env @@ -0,0 +1,39 @@ +# Production Environment Configuration +# Used by: momentry binary on port 3002 +# +# This file extracts production-specific variables from .env +# Startup scripts must export these variables for Python subprocess inheritance + +# Server Configuration +MOMENTRY_SERVER_PORT=3002 +MOMENTRY_REDIS_PREFIX=momentry: + +# Database Schema +DATABASE_SCHEMA=public + +# Output Directory (CRITICAL for Python scripts) +MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output + +# Backup Directory +MOMENTRY_BACKUP_DIR=/Users/accusys/momentry/backup/momentry + +# Storage +MOMENTRY_STORAGE_ROOT=/Users/accusys/momentry/var/sftpgo/data + +# Python Path +MOMENTRY_PYTHON_PATH=/opt/homebrew/bin/python3.11 + +# Logging +RUST_LOG=debug +MOMENTRY_LOG_LEVEL=debug + +# Worker Configuration +MOMENTRY_WORKER_ENABLED=true +MOMENTRY_MAX_CONCURRENT=6 +MOMENTRY_POLL_INTERVAL=10 +MOMENTRY_WORKER_BATCH_SIZE=5 +MOMENTRY_FORCE_RETRY=true + +# TMDb Integration +TMDB_API_KEY=e9cde52197f6f8df4d9db99da93db1fb +MOMENTRY_TMDB_PROBE_ENABLED=true \ No newline at end of file diff --git a/run-server-3002.sh b/run-server-3002.sh index 271a7cf..9aef152 100755 --- a/run-server-3002.sh +++ b/run-server-3002.sh @@ -7,6 +7,12 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" +# Production environment variables +export MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output +export DATABASE_SCHEMA=public +export MOMENTRY_REDIS_PREFIX=momentry: +export MOMENTRY_SERVER_PORT=3002 + # Kill existing server on port 3002 PID=$(lsof -ti :3002 2>/dev/null || true) if [ -n "$PID" ]; then diff --git a/run-server-3003.sh b/run-server-3003.sh index cbb708b..b93f17d 100755 --- a/run-server-3003.sh +++ b/run-server-3003.sh @@ -13,6 +13,7 @@ mkdir -p logs export DATABASE_SCHEMA=dev export MOMENTRY_SERVER_PORT=3003 export MOMENTRY_REDIS_PREFIX=momentry_dev: +export MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output_dev # Kill existing server on port 3003 PID=$(lsof -ti :3003 2>/dev/null || true) diff --git a/run-worker-3002.sh b/run-worker-3002.sh new file mode 100755 index 0000000..4f82908 --- /dev/null +++ b/run-worker-3002.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# Start production worker on port 3002 +# Logs to logs/worker_3002.log + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +mkdir -p logs + +# Production environment variables +export MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output +export DATABASE_SCHEMA=public +export MOMENTRY_REDIS_PREFIX=momentry: + +# Kill existing worker via PID file +if [ -f logs/worker_3002.pid ]; then + WPID=$(cat logs/worker_3002.pid) + if kill -0 "$WPID" 2>/dev/null; then + echo "Killing existing worker (PID: $WPID)" + kill "$WPID" 2>/dev/null || true + sleep 1 + fi + rm -f logs/worker_3002.pid +fi + +# Build if needed +if [ ! -f target/release/momentry ]; then + echo "Building release binary..." + cargo build --release --bin momentry +fi + +# Start worker +echo "Starting momentry worker (DATABASE_SCHEMA=${DATABASE_SCHEMA})..." +nohup ./target/release/momentry worker > logs/worker_3002.log 2>&1 & +WPID=$! +echo "$WPID" > logs/worker_3002.pid +echo "Worker started (PID: $WPID)" +echo "Worker logs: logs/worker_3002.log" \ No newline at end of file