diff --git a/docker-compose.yml b/docker-compose.yml index 1d8e496..259bc97 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,18 +29,20 @@ services: timetrack: build: . - environment: - FLASK_ENV: ${FLASK_ENV:-production} - SECRET_KEY: ${SECRET_KEY} - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} - MAIL_SERVER: ${MAIL_SERVER} - MAIL_PORT: ${MAIL_PORT} - MAIL_USE_TLS: ${MAIL_USE_TLS} - MAIL_USERNAME: ${MAIL_USERNAME} - MAIL_PASSWORD: ${MAIL_PASSWORD} - MAIL_DEFAULT_SENDER: ${MAIL_DEFAULT_SENDER} ports: - "${TIMETRACK_PORT:-5000}:5000" + environment: + - DATABASE_URL=${DATABASE_URL} + - POSTGRES_HOST=db + - POSTGRES_DB=${POSTGRES_DB} + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - FLASK_ENV=${FLASK_ENV} + - SECRET_KEY=${SECRET_KEY} + - MAIL_SERVER=${MAIL_SERVER} + - MAIL_USERNAME=${MAIL_USERNAME} + - MAIL_PASSWORD=${MAIL_PASSWORD} + - MAIL_DEFAULT_SENDER=${MAIL_DEFAULT_SENDER} depends_on: db: condition: service_healthy diff --git a/migrations/run_postgres_migrations.py b/migrations/run_postgres_migrations.py index ff28f71..681b323 100755 --- a/migrations/run_postgres_migrations.py +++ b/migrations/run_postgres_migrations.py @@ -53,16 +53,28 @@ def run_migration(migration_file): # Check if it's a SQL file if migration_file.endswith('.sql'): # Run SQL file using psql - import os - db_host = os.environ.get('POSTGRES_HOST', 'db') - db_name = os.environ.get('POSTGRES_DB', 'timetrack') - db_user = os.environ.get('POSTGRES_USER', 'timetrack') + # Try to parse DATABASE_URL first, fall back to individual env vars + database_url = os.environ.get('DATABASE_URL') + if database_url: + # Parse DATABASE_URL: postgresql://user:password@host:port/dbname + from urllib.parse import urlparse + parsed = urlparse(database_url) + db_host = parsed.hostname or 'db' + db_port = parsed.port or 5432 + db_name = parsed.path.lstrip('/') or 'timetrack' + db_user = parsed.username or 'timetrack' + db_password = parsed.password or 'timetrack' + else: + db_host = os.environ.get('POSTGRES_HOST', 'db') + db_name = os.environ.get('POSTGRES_DB', 'timetrack') + db_user = os.environ.get('POSTGRES_USER', 'timetrack') + db_password = os.environ.get('POSTGRES_PASSWORD', 'timetrack') result = subprocess.run( ['psql', '-h', db_host, '-U', db_user, '-d', db_name, '-f', script_path], capture_output=True, text=True, - env={**os.environ, 'PGPASSWORD': os.environ.get('POSTGRES_PASSWORD', 'timetrack')} + env={**os.environ, 'PGPASSWORD': db_password} ) else: # Run Python migration script