mirror of
https://github.com/DRYTRIX/TimeTracker.git
synced 2026-01-04 02:30:01 -06:00
66 lines
1.8 KiB
Bash
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()
|