Files
TimeTracker/docker/start-fixed.sh
2025-08-30 11:32:03 +02:00

66 lines
1.8 KiB
Bash

#!/bin/bash
set -e
cd /app
export FLASK_APP=app
echo "=== Starting TimeTracker (Fixed Shell Mode) ==="
echo "Waiting for database to be ready..."
# Wait for Postgres to be ready
python - <<"PY"
import os
import time
import sys
from sqlalchemy import create_engine, text
from sqlalchemy.exc import OperationalError
url = os.getenv("DATABASE_URL", "")
if url.startswith("postgresql"):
for attempt in range(30):
try:
engine = create_engine(url, pool_pre_ping=True)
with engine.connect() as conn:
conn.execute(text("SELECT 1"))
print("Database connection established successfully")
break
except Exception as e:
print(f"Waiting for database... (attempt {attempt+1}/30): {e}")
time.sleep(2)
else:
print("Database not ready after waiting, exiting...")
sys.exit(1)
else:
print("No PostgreSQL database configured, skipping connection check")
PY
echo "=== RUNNING DATABASE INITIALIZATION ==="
# Step 1: Run SQL database initialization first (creates basic tables including tasks)
echo "Step 1: Running SQL database initialization..."
if python /app/docker/init-database-sql.py; then
echo "✓ SQL database initialization completed"
else
echo "✗ SQL database initialization failed"
exit 1
fi
# Step 2: Run main database initialization (handles Flask-specific setup)
echo "Step 2: Running main database initialization..."
if python /app/docker/init-database.py; then
echo "✓ Main database initialization completed"
else
echo "✗ Main database initialization failed"
exit 1
fi
echo "✓ All database initialization completed successfully"
echo "Starting application..."
# Start gunicorn
exec gunicorn \
--bind 0.0.0.0:8080 \
--worker-class eventlet \
--workers 1 \
--timeout 120 \
app:create_app()