v1.0.92: separate DB_* env vars instead of DATABASE_URL
This commit is contained in:
+22
-5
@@ -4,8 +4,13 @@ Connection pool для PostgreSQL (psycopg2).
|
||||
Lazy-init: пул создаётся при первом обращении к БД в каждом gunicorn-воркере.
|
||||
Это безопасно для fork-модели — соединения открываются ПОСЛЕ fork.
|
||||
|
||||
DSN: из переменной окружения DATABASE_URL.
|
||||
Формат: postgresql://user:pass@host:5432/dbname?sslmode=require
|
||||
Переменные окружения (отдельно!):
|
||||
DB_HOST — хост (по умолчанию localhost)
|
||||
DB_PORT — порт (по умолчанию 5432)
|
||||
DB_NAME — имя БД (по умолчанию autotest)
|
||||
DB_USER — пользователь
|
||||
DB_PASSWORD — пароль
|
||||
DB_SSLMODE — sslmode (по умолчанию require)
|
||||
"""
|
||||
|
||||
import os
|
||||
@@ -15,13 +20,25 @@ 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 = os.getenv("DATABASE_URL", "")
|
||||
if not dsn:
|
||||
return None
|
||||
dsn = _build_dsn()
|
||||
if not os.getenv("DB_USER"):
|
||||
return None # нет креда — нет пула
|
||||
_pool = pool.ThreadedConnectionPool(1, 5, dsn)
|
||||
return _pool
|
||||
|
||||
|
||||
Reference in New Issue
Block a user