From f83a64bd8312cddc2d608cffe7919d70284b5551 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 7 Mar 2026 21:06:23 -0300 Subject: [PATCH] fix: robust URL parsing in start.sh with Node.js to resolve regex errors --- frontend/start.sh | 60 +++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/frontend/start.sh b/frontend/start.sh index 338b8e4..e5eeef6 100644 --- a/frontend/start.sh +++ b/frontend/start.sh @@ -1,59 +1,57 @@ #!/bin/sh set -e -echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO ---" +echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO (v2) ---" -# 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/\?.*//') +# Extrai os dados da URL usando Node (muito mais seguro que sed) +export DB_HOST=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.hostname); } catch(e) { console.log('error'); }") +export DB_PORT=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.port || '5432'); } catch(e) { console.log('5432'); }") -echo "📡 Host detectado: $DB_HOST na porta: $DB_PORT" +if [ "$DB_HOST" = "error" ]; then + echo "❌ ERRO: A DATABASE_URL está em um formato inválido!" + exit 1 +fi -# Tenta um "ping" na porta do banco usando o próprio Node.js (porque nc pode não existir) +echo "📡 Tentando contato com: $DB_HOST na porta $DB_PORT" + +# Teste de porta usando Node 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!'); +const client = net.createConnection({ host: '$DB_HOST', port: parseInt('$DB_PORT') }, () => { + console.log('✅ REDE OK: A porta $DB_PORT está aberta!'); 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); + console.log('❌ FALHA DE REDE: Porta fechada ou host inacessível: ' + 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." +setTimeout(() => { process.exit(1); }, 3000); +" || echo "⚠️ Aguardando rede estabilizar..." -# Função para tentar conectar com o Prisma e MOSTRAR o erro +# Função de espera wait_for_db() { - echo "⏳ Tentando login no banco de dados..." - max_retries=10 + echo "⏳ Validando login no banco..." + max_retries=15 count=0 while true; do count=$((count + 1)) echo "🔄 Tentativa $count/$max_retries..." - # Tenta o dry-run e captura o erro real + # Tenta o dry-run do prisma 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." + if [ $? -eq 0 ]; then + echo "✅ SUCESSO: Banco conectado e autenticado!" 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 "--------------------------------------------------" + echo "❌ FALHA: O Prisma disse:" + echo "$PRISMA_ERR" | grep -E "P1001|P1002|P1003|P1010|Authentication|denied|Database" || echo "Erro desconhecido (verificar logs)" if [ $count -gt $max_retries ]; then - echo "❌ Desistindo após $max_retries tentativas." + echo "❌ Desistindo." exit 1 fi - - echo "😴 Aguardando 5s para tentar de novo..." - sleep 5 + sleep 4 done } @@ -61,11 +59,7 @@ 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." + ./node_modules/.bin/prisma db seed || echo "⚠️ Seed já configurado." fi echo "🚀 Iniciando aplicação..."