update dockerfile

This commit is contained in:
Flatlogic Bot 2026-01-29 17:42:36 +00:00
parent c1eea39519
commit 279c717fdd
2 changed files with 18 additions and 4 deletions

View File

@ -10,10 +10,12 @@ WORKDIR /app
# Install system dependencies # Install system dependencies
# WeasyPrint needs: libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz-subset0 libjpeg-dev libopenjp2-7-dev libxcb1 # WeasyPrint needs: libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz-subset0 libjpeg-dev libopenjp2-7-dev libxcb1
# MySQLclient needs: default-libmysqlclient-dev gcc pkg-config # MySQLclient needs: default-libmysqlclient-dev gcc pkg-config
# MariaDB Client is added to ensure all authentication plugins (like mysql_native_password) are available for MariaDB 11
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
gcc \ gcc \
pkg-config \ pkg-config \
default-libmysqlclient-dev \ default-libmysqlclient-dev \
mariadb-client \
libpango-1.0-0 \ libpango-1.0-0 \
libpangoft2-1.0-0 \ libpangoft2-1.0-0 \
libharfbuzz-subset0 \ libharfbuzz-subset0 \
@ -39,4 +41,3 @@ EXPOSE 8000
# Entrypoint # Entrypoint
ENTRYPOINT ["/app/entrypoint.sh"] ENTRYPOINT ["/app/entrypoint.sh"]

View File

@ -2,7 +2,7 @@ import time
from django.db import connections from django.db import connections
from django.db.utils import OperationalError from django.db.utils import OperationalError
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.conf import settings
class Command(BaseCommand): class Command(BaseCommand):
"""Django command to pause execution until database is available""" """Django command to pause execution until database is available"""
@ -12,6 +12,10 @@ class Command(BaseCommand):
requires_system_checks = [] requires_system_checks = []
def handle(self, *args, **options): def handle(self, *args, **options):
# Print the connection details (masked password) for debugging
db_conf = settings.DATABASES['default']
self.stdout.write(f"Debug Info - Host: {db_conf.get('HOST')}, Port: {db_conf.get('PORT')}, Name: {db_conf.get('NAME')}, User: {db_conf.get('USER')}")
self.stdout.write('Waiting for database...') self.stdout.write('Waiting for database...')
db_conn = None db_conn = None
for i in range(30): # Retry for 30 seconds for i in range(30): # Retry for 30 seconds
@ -22,7 +26,16 @@ class Command(BaseCommand):
self.stdout.write(self.style.SUCCESS('Database available!')) self.stdout.write(self.style.SUCCESS('Database available!'))
return return
except OperationalError as e: except OperationalError as e:
self.stdout.write(f'Database unavailable ({e}), waiting 1 second...') # Check for specific "Unknown database" error (MySQL code 1049)
error_str = str(e)
if "1049" in error_str or "Unknown database" in error_str:
self.stdout.write(self.style.ERROR(f"CRITICAL ERROR: The database '{db_conf.get('NAME')}' does not exist on the server."))
self.stdout.write(self.style.ERROR("Solution: Check your DB_NAME environment variable. It usually defaults to 'default' or the service name."))
# Fail immediately for this specific error as it won't resolve itself
return
# Print the full error message
self.stdout.write(f'Database unavailable (Error: {e}), waiting 1 second...')
time.sleep(1) time.sleep(1)
except Exception as e: except Exception as e:
self.stdout.write(self.style.WARNING(f'Database error: {e}, waiting 1 second...')) self.stdout.write(self.style.WARNING(f'Database error: {e}, waiting 1 second...'))