From c26826965ac32e4576e1a26e20b55492fb54f2fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 28 Jul 2026 09:37:14 +0400 Subject: [PATCH] =?UTF-8?q?v1.0.92:=20back=20to=20DATABASE=5FURL=20?= =?UTF-8?q?=E2=80=94=20JSON=20format=20for=20jsonEnv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/db/init_db.py | 4 ++-- site/db/pool.py | 29 ++++++----------------------- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/site/db/init_db.py b/site/db/init_db.py index 3be6be8..5898cc7 100644 --- a/site/db/init_db.py +++ b/site/db/init_db.py @@ -49,8 +49,8 @@ CREATE INDEX IF NOT EXISTS idx_runs_created def init_db(): """Применить схему — идемпотентно, безопасно для конкурентного вызова.""" - if not os.getenv("DB_USER"): - print("[DB] DB_USER not set — skipping init", flush=True) + if not os.getenv("DATABASE_URL"): + print("[DB] DATABASE_URL not set — skipping init", flush=True) return conn = get_conn() diff --git a/site/db/pool.py b/site/db/pool.py index 91400fc..203be00 100644 --- a/site/db/pool.py +++ b/site/db/pool.py @@ -2,15 +2,10 @@ Connection pool для PostgreSQL (psycopg2). Lazy-init: пул создаётся при первом обращении к БД в каждом gunicorn-воркере. -Это безопасно для fork-модели — соединения открываются ПОСЛЕ fork. +Безопасно для fork-модели — соединения открываются ПОСЛЕ fork. -Переменные окружения (отдельно!): - DB_HOST — хост (по умолчанию localhost) - DB_PORT — порт (по умолчанию 5432) - DB_NAME — имя БД (по умолчанию autotest) - DB_USER — пользователь - DB_PASSWORD — пароль - DB_SSLMODE — sslmode (по умолчанию require) +Переменная окружения: + DATABASE_URL — postgresql://user:pass@host:5432/dbname?sslmode=require """ import os @@ -20,25 +15,13 @@ from psycopg2 import pool _pool = None -def _build_dsn(): - """Собрать DSN из отдельных переменных окружения.""" - return ( - f"host={os.getenv('DB_HOST', 'localhost')} " - f"port={os.getenv('DB_PORT', '5432')} " - f"dbname={os.getenv('DB_NAME', 'autotest')} " - f"user={os.getenv('DB_USER', '')} " - f"password={os.getenv('DB_PASSWORD', '')} " - f"sslmode={os.getenv('DB_SSLMODE', 'require')}" - ) - - def get_pool(): """Lazy-init ThreadedConnectionPool (1-5 соединений).""" global _pool if _pool is None: - dsn = _build_dsn() - if not os.getenv("DB_USER"): - return None # нет креда — нет пула + dsn = os.getenv("DATABASE_URL", "") + if not dsn: + return None _pool = pool.ThreadedConnectionPool(1, 5, dsn) return _pool