Fix worker crash: remove broken gunicorn post_fork hook
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+14
-12
@@ -60,6 +60,20 @@ def create_app(setup_database=True):
|
||||
|
||||
register_cli(app)
|
||||
|
||||
# Ensure models are registered even when DB setup runs in init_db.py.
|
||||
with app.app_context():
|
||||
from app.models import ( # noqa: F401
|
||||
AdBanner,
|
||||
Folder,
|
||||
FolderInvite,
|
||||
FolderMember,
|
||||
PasswordResetToken,
|
||||
Photo,
|
||||
SiteSettings,
|
||||
User,
|
||||
UserGroup,
|
||||
)
|
||||
|
||||
@app.context_processor
|
||||
def inject_banners():
|
||||
from app.banner_service import get_banners_by_position
|
||||
@@ -71,18 +85,6 @@ def create_app(setup_database=True):
|
||||
|
||||
if setup_database:
|
||||
with app.app_context():
|
||||
from app.models import ( # noqa: F401
|
||||
AdBanner,
|
||||
Folder,
|
||||
FolderInvite,
|
||||
FolderMember,
|
||||
PasswordResetToken,
|
||||
Photo,
|
||||
SiteSettings,
|
||||
User,
|
||||
UserGroup,
|
||||
)
|
||||
|
||||
db.create_all()
|
||||
|
||||
if os.getenv("SKIP_DB_INIT") != "1":
|
||||
|
||||
+7
-3
@@ -2,6 +2,7 @@ import os
|
||||
|
||||
from flask import (
|
||||
Blueprint,
|
||||
Response,
|
||||
abort,
|
||||
current_app,
|
||||
flash,
|
||||
@@ -21,6 +22,7 @@ from app.models import Folder, Photo
|
||||
from app.settings_service import get_settings
|
||||
from app.storage_service import delete_photo_file, get_photo_stream
|
||||
from app.upload_service import process_uploads
|
||||
from sqlalchemy import text
|
||||
|
||||
bp = Blueprint("main", __name__)
|
||||
|
||||
@@ -28,10 +30,12 @@ bp = Blueprint("main", __name__)
|
||||
@bp.route("/health")
|
||||
def health():
|
||||
try:
|
||||
db.session.execute(db.text("SELECT 1"))
|
||||
return {"status": "ok"}, 200
|
||||
db.session.execute(text("SELECT 1"))
|
||||
db.session.remove()
|
||||
return Response("ok\n", mimetype="text/plain")
|
||||
except Exception as exc:
|
||||
return {"status": "error", "detail": str(exc)}, 503
|
||||
db.session.remove()
|
||||
return Response(f"error: {exc}\n", status=503, mimetype="text/plain")
|
||||
|
||||
|
||||
@bp.route("/")
|
||||
|
||||
+1
-7
@@ -3,10 +3,4 @@ workers = 2
|
||||
timeout = 120
|
||||
accesslog = "-"
|
||||
errorlog = "-"
|
||||
capture_output = True
|
||||
|
||||
|
||||
def post_fork(server, worker):
|
||||
from app import db
|
||||
|
||||
db.engine.dispose()
|
||||
loglevel = "info"
|
||||
|
||||
+9
-2
@@ -1,3 +1,10 @@
|
||||
from app import create_app
|
||||
import sys
|
||||
|
||||
create_app(setup_database=True)
|
||||
try:
|
||||
from app import create_app
|
||||
|
||||
create_app(setup_database=True)
|
||||
print("Database init OK", flush=True)
|
||||
except Exception as exc:
|
||||
print(f"Database init FAILED: {exc}", file=sys.stderr, flush=True)
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user