Implemented waiting for db readiness

This commit is contained in:
Marcin-Ramotowski 2025-06-11 19:43:47 +00:00
parent 636a382cf5
commit 9e010ed389

View File

@ -4,10 +4,29 @@ from flask_jwt_extended import JWTManager
from jwt import ExpiredSignatureError from jwt import ExpiredSignatureError
from models import db, RevokedToken from models import db, RevokedToken
import os import os
from sqlalchemy import text
from sqlalchemy.exc import DatabaseError
import time
from utils import init_db from utils import init_db
from views import user_bp from views import user_bp
from werkzeug.exceptions import HTTPException from werkzeug.exceptions import HTTPException
MAX_RETRIES = 100
def wait_for_db():
for retries in range(MAX_RETRIES):
try:
with db.engine.connect() as connection:
connection.execute(text("SELECT 1"))
print("Successfully connected with database.")
return
except DatabaseError:
print(f"Waiting for database... (retry {retries + 1})")
time.sleep(3)
print("Failed to connect to database.")
raise Exception("Database not ready after multiple retries.")
def create_app(config_name="default"): def create_app(config_name="default"):
"""Creates and returns a new instance of Flask app.""" """Creates and returns a new instance of Flask app."""
load_dotenv() load_dotenv()
@ -53,6 +72,7 @@ def create_app(config_name="default"):
# Fill database by initial values (only if we are not testing) # Fill database by initial values (only if we are not testing)
with app.app_context(): with app.app_context():
wait_for_db()
db.create_all() db.create_all()
if config_name != "testing": if config_name != "testing":
init_db() init_db()