#!/bin/sh set -e echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO ---" # Extrai o host da URL echo "🌐 DATABASE_URL configurada. Testando comunicação..." DB_HOST=$(echo $DATABASE_URL | sed -e 's/.*@//' -e 's/:.*//') DB_PORT=$(echo $DATABASE_URL | sed -e 's/.*://' -e 's/\/.*//' -e 's/\?.*//') echo "📡 Host detectado: $DB_HOST na porta: $DB_PORT" # Tenta um "ping" na porta do banco usando o próprio Node.js (porque nc pode não existir) node -e " const net = require('net'); const client = net.createConnection({ host: '$DB_HOST', port: $DB_PORT }, () => { console.log('✅ SUCESSO: A porta $DB_PORT está aberta no host $DB_HOST!'); process.exit(0); }); client.on('error', (err) => { console.log('❌ ERRO DE REDE: Não foi possível abrir conexão na porta $DB_PORT: ' + err.message); process.exit(1); }); setTimeout(() => { console.log('⏱️ TIMEOUT: O banco não respondeu na porta $DB_PORT'); process.exit(1); }, 5000); " || echo "⚠️ O banco nível de rede ainda não responde." # Função para tentar conectar com o Prisma e MOSTRAR o erro wait_for_db() { echo "⏳ Tentando login no banco de dados..." max_retries=10 count=0 while true; do count=$((count + 1)) echo "🔄 Tentativa $count/$max_retries..." # Tenta o dry-run e captura o erro real PRISMA_ERR=$(./node_modules/.bin/prisma db push --dry-run 2>&1) PRISMA_STATUS=$? if [ $PRISMA_STATUS -eq 0 ]; then echo "✅ SUCESSO TOTAL! Banco de dados conectado e pronto." break fi echo "❌ FALHA NA CONEXÃO. O Prisma disse:" echo "--------------------------------------------------" echo "$PRISMA_ERR" | grep -E "P1001|P1002|P1003|P1010|P2002|Authentication|denied|Database" || echo "$PRISMA_ERR" echo "--------------------------------------------------" if [ $count -gt $max_retries ]; then echo "❌ Desistindo após $max_retries tentativas." exit 1 fi echo "😴 Aguardando 5s para tentar de novo..." sleep 5 done } if [ -n "$DATABASE_URL" ]; then wait_for_db echo "🔄 Sincronizando tabelas..." ./node_modules/.bin/prisma db push --accept-data-loss echo "🌱 Executando seed..." ./node_modules/.bin/prisma db seed || echo "⚠️ Seed ja existia ou falhou." else echo "⚠️ DATABASE_URL não encontrada." fi echo "🚀 Iniciando aplicação..." exec node server.js