v1.0.92: back to DATABASE_URL — JSON format for jsonEnv
This commit is contained in:
+2
-2
@@ -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()
|
||||
|
||||
+6
-23
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user