Fix DB auth problems in migration scripts.
This commit is contained in:
@@ -29,18 +29,20 @@ services:
|
|||||||
|
|
||||||
timetrack:
|
timetrack:
|
||||||
build: .
|
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:
|
ports:
|
||||||
- "${TIMETRACK_PORT:-5000}:5000"
|
- "${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:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|||||||
@@ -53,16 +53,28 @@ def run_migration(migration_file):
|
|||||||
# Check if it's a SQL file
|
# Check if it's a SQL file
|
||||||
if migration_file.endswith('.sql'):
|
if migration_file.endswith('.sql'):
|
||||||
# Run SQL file using psql
|
# Run SQL file using psql
|
||||||
import os
|
# 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_host = os.environ.get('POSTGRES_HOST', 'db')
|
||||||
db_name = os.environ.get('POSTGRES_DB', 'timetrack')
|
db_name = os.environ.get('POSTGRES_DB', 'timetrack')
|
||||||
db_user = os.environ.get('POSTGRES_USER', 'timetrack')
|
db_user = os.environ.get('POSTGRES_USER', 'timetrack')
|
||||||
|
db_password = os.environ.get('POSTGRES_PASSWORD', 'timetrack')
|
||||||
|
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
['psql', '-h', db_host, '-U', db_user, '-d', db_name, '-f', script_path],
|
['psql', '-h', db_host, '-U', db_user, '-d', db_name, '-f', script_path],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
env={**os.environ, 'PGPASSWORD': os.environ.get('POSTGRES_PASSWORD', 'timetrack')}
|
env={**os.environ, 'PGPASSWORD': db_password}
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# Run Python migration script
|
# Run Python migration script
|
||||||
|
|||||||
Reference in New Issue
Block a user