From a02f7ec511f7802fa39d1001c6edfd2ccd0dea97 Mon Sep 17 00:00:00 2001 From: "n.siegfried" Date: Tue, 16 Jun 2026 16:03:38 -0700 Subject: [PATCH] Prevent table-creation race: gunicorn --preload With 2 workers, both ran Base.metadata.create_all() at import on an empty DB, racing on CREATE TABLE (duplicate pg_type for "projects"). --preload imports the app once in the master before forking, so tables are created a single time. Co-Authored-By: Claude Opus 4.8 (1M context) --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 00d7907..7335448 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,5 +4,7 @@ COPY server/requirements.txt ./server/ RUN pip install --no-cache-dir -r server/requirements.txt COPY server/ ./server/ EXPOSE 8000 -CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", \ +# --preload imports the app once in the master (so create_all runs a single time) +# before forking workers, preventing a table-creation race on first startup. +CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "--preload", \ "-b", "0.0.0.0:8000", "--workers", "2", "server.app:app"] \ No newline at end of file