fix: robust URL parsing in start.sh with Node.js to resolve regex errors

This commit is contained in:
Erik
2026-03-07 21:06:23 -03:00
parent a3ac5e5d3a
commit f83a64bd83

View File

@@ -1,59 +1,57 @@
#!/bin/sh #!/bin/sh
set -e set -e
echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO ---" echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO (v2) ---"
# Extrai o host da URL # Extrai os dados da URL usando Node (muito mais seguro que sed)
echo "🌐 DATABASE_URL configurada. Testando comunicação..." export DB_HOST=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.hostname); } catch(e) { console.log('error'); }")
DB_HOST=$(echo $DATABASE_URL | sed -e 's/.*@//' -e 's/:.*//') export DB_PORT=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.port || '5432'); } catch(e) { console.log('5432'); }")
DB_PORT=$(echo $DATABASE_URL | sed -e 's/.*://' -e 's/\/.*//' -e 's/\?.*//')
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 " node -e "
const net = require('net'); const net = require('net');
const client = net.createConnection({ host: '$DB_HOST', port: $DB_PORT }, () => { const client = net.createConnection({ host: '$DB_HOST', port: parseInt('$DB_PORT') }, () => {
console.log('✅ SUCESSO: A porta $DB_PORT está aberta no host $DB_HOST!'); console.log('✅ REDE OK: A porta $DB_PORT está aberta!');
process.exit(0); process.exit(0);
}); });
client.on('error', (err) => { 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); process.exit(1);
}); });
setTimeout(() => { console.log('⏱️ TIMEOUT: O banco não respondeu na porta $DB_PORT'); process.exit(1); }, 5000); setTimeout(() => { process.exit(1); }, 3000);
" || echo "⚠️ O banco nível de rede ainda não responde." " || echo "⚠️ Aguardando rede estabilizar..."
# Função para tentar conectar com o Prisma e MOSTRAR o erro # Função de espera
wait_for_db() { wait_for_db() {
echo "⏳ Tentando login no banco de dados..." echo "⏳ Validando login no banco..."
max_retries=10 max_retries=15
count=0 count=0
while true; do while true; do
count=$((count + 1)) count=$((count + 1))
echo "🔄 Tentativa $count/$max_retries..." 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_ERR=$(./node_modules/.bin/prisma db push --dry-run 2>&1)
PRISMA_STATUS=$? if [ $? -eq 0 ]; then
echo "✅ SUCESSO: Banco conectado e autenticado!"
if [ $PRISMA_STATUS -eq 0 ]; then
echo "✅ SUCESSO TOTAL! Banco de dados conectado e pronto."
break break
fi fi
echo "❌ FALHA NA CONEXÃO. O Prisma disse:" echo "❌ FALHA: O Prisma disse:"
echo "--------------------------------------------------" echo "$PRISMA_ERR" | grep -E "P1001|P1002|P1003|P1010|Authentication|denied|Database" || echo "Erro desconhecido (verificar logs)"
echo "$PRISMA_ERR" | grep -E "P1001|P1002|P1003|P1010|P2002|Authentication|denied|Database" || echo "$PRISMA_ERR"
echo "--------------------------------------------------"
if [ $count -gt $max_retries ]; then if [ $count -gt $max_retries ]; then
echo "❌ Desistindo após $max_retries tentativas." echo "❌ Desistindo."
exit 1 exit 1
fi fi
sleep 4
echo "😴 Aguardando 5s para tentar de novo..."
sleep 5
done done
} }
@@ -61,11 +59,7 @@ if [ -n "$DATABASE_URL" ]; then
wait_for_db wait_for_db
echo "🔄 Sincronizando tabelas..." echo "🔄 Sincronizando tabelas..."
./node_modules/.bin/prisma db push --accept-data-loss ./node_modules/.bin/prisma db push --accept-data-loss
./node_modules/.bin/prisma db seed || echo "⚠️ Seed já configurado."
echo "🌱 Executando seed..."
./node_modules/.bin/prisma db seed || echo "⚠️ Seed ja existia ou falhou."
else
echo "⚠️ DATABASE_URL não encontrada."
fi fi
echo "🚀 Iniciando aplicação..." echo "🚀 Iniciando aplicação..."