File size: 3,165 Bytes
dc4e6da | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #!/bin/bash
# ============================================
# DocGenie RQ Worker Startup Script
# ============================================
# This script starts an RQ (Redis Queue) worker for processing
# background document generation jobs.
set -e # Exit on error
echo "π Starting DocGenie RQ Worker..."
# Activate virtual environment
VENV_PATH="../.venv"
if [ -d "$VENV_PATH" ]; then
echo "β Activating virtual environment..."
source "$VENV_PATH/bin/activate"
else
echo "β Warning: Virtual environment not found at $VENV_PATH"
fi
# Load environment variables from .env using Python (handles special characters properly)
if [ -f .env ]; then
echo "β Loading .env file..."
eval $(python -c "
import os
from dotenv import load_dotenv
load_dotenv()
for key, value in os.environ.items():
# Only export DocGenie related variables
if key.startswith(('REDIS', 'SUPABASE', 'ANTHROPIC', 'BATCH', 'MESSAGE', 'RQ_', 'GOOGLE')):
# Properly escape single quotes in the value
safe_value = value.replace(\"'\", \"'\\\\''\" )
print(f\"export {key}='{safe_value}'\")
")
else
echo "β Warning: .env file not found"
fi
# Check Redis connection
echo "π Checking Redis connection..."
if ! python -c "import redis; r = redis.from_url('${REDIS_URL:-redis://localhost:6379/0}'); r.ping()" 2>/dev/null; then
echo "β Error: Cannot connect to Redis"
echo " Please ensure Redis is running:"
echo " $ docker run -d -p 6379:6379 redis:latest"
echo " OR"
echo " $ redis-server"
exit 1
fi
echo "β Redis connected"
# Check Supabase configuration
if [ -z "$SUPABASE_URL" ] || [ -z "$SUPABASE_KEY" ]; then
echo "β Error: SUPABASE_URL and SUPABASE_KEY must be set in .env"
exit 1
fi
echo "β Supabase configured"
# Check Claude API key
if [ -z "$ANTHROPIC_API_KEY" ]; then
echo "β Error: ANTHROPIC_API_KEY must be set in .env"
exit 1
fi
echo "β Claude API key configured"
# Create temporary directories
mkdir -p "${BATCH_DATA_DIR:-/tmp/docgenie_batches}"
mkdir -p "${MESSAGE_DATA_DIR:-/tmp/docgenie_messages}"
echo "β Temporary directories created"
# Start worker
QUEUE_NAME="${RQ_QUEUE_NAME:-docgenie}"
echo ""
echo "============================================"
echo "Worker Configuration:"
echo " Queue: $QUEUE_NAME"
# Mask Redis credentials for security
echo " Redis: [HIDDEN]"
echo " Batch Data: ${BATCH_DATA_DIR:-/tmp/docgenie_batches}"
echo " Message Data: ${MESSAGE_DATA_DIR:-/tmp/docgenie_messages}"
echo "============================================"
echo ""
echo "β
Starting RQ worker (press Ctrl+C to stop)..."
echo ""
# Run RQ worker
# - Listen on specified queue
# - Burst mode: exit when queue is empty (use for testing)
# - Remove --burst for production (keeps running)
# Use PYTHONPATH to ensure worker.py can be imported
PYTHONPATH="$(pwd):$PYTHONPATH" rq worker "$QUEUE_NAME" \
--url "${REDIS_URL:-redis://localhost:6379/0}" \
--verbose
# --burst # Uncomment for testing (exit when queue empty)
# Note: Worker will keep running until Ctrl+C is pressed
# In production, use a process manager like systemd or supervisor
|