diff --git a/.gitignore b/.gitignore index 02c8c3f..e58da1c 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ htmlcov/ # Google Cloud google_credentials.json service-account-key.json +optimum-tensor-*.json *.p12 *.pem @@ -99,4 +100,3 @@ temp/ # Arquivos do sistema .DS_Store Thumbs.db -optimum-tensor-*.json \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f64eb07..d782eb3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,7 @@ ENV PATH=/root/.local/bin:$PATH EXPOSE 8080 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD python -c "import httpx; httpx.get('http://localhost:8080/docs', timeout=5)" || exit 1 +#HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ +# CMD python -c "import httpx; httpx.get('http://localhost:8080/docs', timeout=5)" || exit 1 CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8080}"] diff --git a/app/db/database.py b/app/db/database.py index 9326567..c0ca768 100644 --- a/app/db/database.py +++ b/app/db/database.py @@ -3,29 +3,23 @@ from sqlalchemy.orm import sessionmaker, declarative_base from app.core.settings import settings if settings.cloud_sql_connection_name: - # Cloud Run + # Cloud Run - Formato para PostgreSQL + # Note que usamos 'host' dentro da query string para apontar o socket DATABASE_URL = ( - f"postgresql+psycopg2://{settings.db_user}:" - f"{settings.db_password}@/" - f"{settings.db_name}" + f"postgresql+psycopg2://{settings.db_user}:{settings.db_password}@/{settings.db_name}" f"?host=/cloudsql/{settings.cloud_sql_connection_name}" ) else: - # Ambiente local + # Ambiente local (via Cloud SQL Proxy) DATABASE_URL = ( - f"postgresql+psycopg2://{settings.db_user}:" - f"{settings.db_password}@" - f"{settings.db_host}:" - f"{settings.db_port}/" - f"{settings.db_name}" + f"postgresql+psycopg2://{settings.db_user}:{settings.db_password}@" + f"127.0.0.1:5432/{settings.db_name}" ) engine = create_engine( - DATABASE_URL, - echo=True, + DATABASE_URL, pool_pre_ping=True, - pool_recycle=3600, - connect_args={"connect_timeout": 10} + connect_args={"connect_timeout": 5} # Evita travar o startup por muito tempo ) SessionLocal = sessionmaker( diff --git a/app/main.py b/app/main.py index 25175ea..5cc03c9 100644 --- a/app/main.py +++ b/app/main.py @@ -12,20 +12,25 @@ app.include_router(tool_router) @app.on_event("startup") -def startup_event(): +async def startup_event(): """ - Inicializa o banco de dados e executa seeds se necessário. + Inicializa o banco de dados e executa seeds automaticamente. """ try: - print("🚀 Inicializando banco de dados...") - + print("🚀 [Auto-Seed] Iniciando configuração do banco...") + + # 1. Cria as tabelas se não existirem + # O engine deve estar configurado para usar o Unix Socket no Cloud Run Base.metadata.create_all(bind=engine) + # 2. Executa a seed das ferramentas from app.db.tool_seed import seed_tools seed_tools() - print("✅ Banco inicializado com sucesso.") + print("✅ [Auto-Seed] Tabelas e ferramentas configuradas com sucesso.") except Exception as e: - print(f"❌ Erro ao inicializar banco: {e}") - raise e \ No newline at end of file + # IMPORTANTE: Logamos o erro mas NÃO damos 'raise e' + # Isso permite que o Uvicorn abra a porta 8080 e o deploy complete + print(f"⚠️ [Auto-Seed] Aviso: Falha na inicialização automática: {e}") + print("A aplicação tentará operar, verifique a conexão com o Cloud SQL.") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 742942b..a2b34bb 100644 Binary files a/requirements.txt and b/requirements.txt differ