From 357b9231edb8793dd244a2ae81cee08ecc33c93b Mon Sep 17 00:00:00 2001 From: desoladorxx Date: Wed, 22 Jul 2026 14:22:18 -0500 Subject: [PATCH] =?UTF-8?q?Diagn=C3=B3stico=20y=20fix=20SQL=20Server:=20SE?= =?UTF-8?q?RVERNAME,=20TDS=5FVersion,=20Puerto=20explicitos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/Dockerfile | 17 ++++++++--------- backend/data_manager.py | 20 ++++++++++++++++---- backend/data_manager_v2.py | 20 ++++++++++++++++---- docker-compose.yml | 6 +++--- 4 files changed, 43 insertions(+), 20 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index a8ab6c3..e9e04aa 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -4,22 +4,21 @@ FROM python:3.10-slim ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 -# Instalar dependencias del sistema requeridas para pyodbc y msodbcsql +# Instalar dependencias del sistema requeridas para pyodbc y FreeTDS RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ curl \ - gnupg \ + gcc \ + g++ \ unixodbc \ unixodbc-dev \ + freetds-bin \ + freetds-dev \ + tdsodbc \ && rm -rf /var/lib/apt/lists/* -# Agregar la firma de Microsoft y el repositorio correspondiente a la versión de Debian instalada -RUN curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \ - && . /etc/os-release \ - && curl -fsSL https://packages.microsoft.com/config/debian/$VERSION_ID/prod.list > /etc/apt/sources.list.d/mssql-release.list \ - && apt-get update \ - && ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql17 \ - && rm -rf /var/lib/apt/lists/* +# Configurar FreeTDS globalmente con versión TDS 7.3 y charset UTF-8 +RUN mkdir -p /etc/freetds && echo "[global]\n\ttds version = 7.3\n\tclient charset = UTF-8\n" > /etc/freetds/freetds.conf # Establecer directorio de trabajo WORKDIR /app diff --git a/backend/data_manager.py b/backend/data_manager.py index d377868..ef53e6c 100644 --- a/backend/data_manager.py +++ b/backend/data_manager.py @@ -44,10 +44,22 @@ class DataManager: def sql_conn(self): import pyodbc - conn_str = ( - f"DRIVER={self.sql_driver};SERVER={self.sql_server};" - f"DATABASE={self.sql_db};UID={self.sql_user};PWD={self.sql_pass}" - ) + if "FreeTDS" in self.sql_driver: + conn_str = ( + f"DRIVER={self.sql_driver};" + f"SERVER={self.sql_server};" + f"PORT=1433;" + f"DATABASE={self.sql_db};" + f"UID={self.sql_user};" + f"PWD={self.sql_pass};" + f"TDS_Version=7.3;" + f"ClientCharset=UTF-8;" + ) + else: + conn_str = ( + f"DRIVER={self.sql_driver};SERVER={self.sql_server};" + f"DATABASE={self.sql_db};UID={self.sql_user};PWD={self.sql_pass}" + ) return pyodbc.connect(conn_str) # ── Config de campañas (GitHub, opcional) ─────────────────── diff --git a/backend/data_manager_v2.py b/backend/data_manager_v2.py index 7dbd9c6..65b418d 100644 --- a/backend/data_manager_v2.py +++ b/backend/data_manager_v2.py @@ -139,10 +139,22 @@ class DataManager: def sql_conn(self): import pyodbc - conn_str = ( - f"DRIVER={self.sql_driver};SERVER={self.sql_server};" - f"DATABASE={self.sql_db};UID={self.sql_user};PWD={self.sql_pass}" - ) + if "FreeTDS" in self.sql_driver: + conn_str = ( + f"DRIVER={self.sql_driver};" + f"SERVER={self.sql_server};" + f"PORT=1433;" + f"DATABASE={self.sql_db};" + f"UID={self.sql_user};" + f"PWD={self.sql_pass};" + f"TDS_Version=7.3;" + f"ClientCharset=UTF-8;" + ) + else: + conn_str = ( + f"DRIVER={self.sql_driver};SERVER={self.sql_server};" + f"DATABASE={self.sql_db};UID={self.sql_user};PWD={self.sql_pass}" + ) return pyodbc.connect(conn_str) # ── CHATWOOT: leads de pauta (mapa de campañas, dedup por mensaje) ── diff --git a/docker-compose.yml b/docker-compose.yml index 94102f3..0ab3395 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,8 +19,8 @@ services: - SQL_DATABASE=${SQL_DATABASE} - SQL_USERNAME=${SQL_USERNAME} - SQL_PASSWORD=${SQL_PASSWORD} - # En el contenedor Docker usaremos el driver oficial de Linux - - SQL_DRIVER=${SQL_DRIVER:-{ODBC Driver 17 for SQL Server}} + # En el contenedor Docker usaremos FreeTDS o el driver configurado en el entorno + - SQL_DRIVER=${SQL_DRIVER:-{FreeTDS}} - GITHUB_BASE=${GITHUB_BASE} - SUPABASE_URL=${SUPABASE_URL} - SUPABASE_KEY=${SUPABASE_KEY} @@ -40,7 +40,7 @@ services: context: ./frontend dockerfile: Dockerfile args: - - VITE_API_URL=${VITE_API_URL} + - VITE_API_URL=https://api-leads.escueladerefrigeracion.lat container_name: leads-frontend restart: unless-stopped ports: