debug: add verbose prisma errors to start-up script
This commit is contained in:
@@ -1,47 +1,72 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
echo "🔎 --- DIAGNÓSTICO DE REDE ---"
|
echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO ---"
|
||||||
echo "🌐 Tentando resolver o host do banco..."
|
|
||||||
# Tenta descobrir o IP do host do banco
|
|
||||||
if command -v getent >/dev/null; then
|
|
||||||
echo "Host: $DATABASE_URL"
|
|
||||||
# Extrai o host da URL (tudo entre @ e :)
|
|
||||||
DB_HOST=$(echo $DATABASE_URL | sed -e 's/.*@//' -e 's/:.*//')
|
|
||||||
echo "🔍 Resolvendo IP para: $DB_HOST"
|
|
||||||
getent hosts $DB_HOST || echo "⚠️ Não foi possível resolver o nome do host via DNS interno."
|
|
||||||
else
|
|
||||||
echo "⚠️ 'getent' não disponível para diagnóstico."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Função para esperar o banco de dados
|
# 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() {
|
wait_for_db() {
|
||||||
echo "⏳ Aguardando banco de dados..."
|
echo "⏳ Tentando login no banco de dados..."
|
||||||
max_retries=20
|
max_retries=10
|
||||||
count=0
|
count=0
|
||||||
while ! ./node_modules/.bin/prisma db push --dry-run > /dev/null 2>&1; do
|
while true; do
|
||||||
count=$((count + 1))
|
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
|
if [ $count -gt $max_retries ]; then
|
||||||
echo "❌ Erro: O Banco de Dados continua inalcançável após $max_retries tentativas."
|
echo "❌ Desistindo após $max_retries tentativas."
|
||||||
echo "💡 DICA: Verifique se o Banco e o Site estão na MESMA 'Docker Network' no Dokploy."
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "🔄 Tentativa $count/$max_retries: Banco ainda offline ou invisível..."
|
|
||||||
sleep 3
|
echo "😴 Aguardando 5s para tentar de novo..."
|
||||||
|
sleep 5
|
||||||
done
|
done
|
||||||
echo "✅ CONEXÃO ESTABELECIDA! Banco de dados encontrado."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -n "$DATABASE_URL" ]; then
|
if [ -n "$DATABASE_URL" ]; then
|
||||||
wait_for_db
|
wait_for_db
|
||||||
echo "🔄 Sincronizando tabelas do Prisma..."
|
echo "🔄 Sincronizando tabelas..."
|
||||||
./node_modules/.bin/prisma db push --accept-data-loss
|
./node_modules/.bin/prisma db push --accept-data-loss
|
||||||
|
|
||||||
echo "🌱 Executando seed..."
|
echo "🌱 Executando seed..."
|
||||||
./node_modules/.bin/prisma db seed || echo "⚠️ Seed falhou (pode ser que os dados já existam)"
|
./node_modules/.bin/prisma db seed || echo "⚠️ Seed ja existia ou falhou."
|
||||||
else
|
else
|
||||||
echo "⚠️ DATABASE_URL vazia. O deploy vai falhar ou subir sem banco."
|
echo "⚠️ DATABASE_URL não encontrada."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "🚀 Subindo aplicação..."
|
echo "🚀 Iniciando aplicação..."
|
||||||
exec node server.js
|
exec node server.js
|
||||||
|
|||||||
Reference in New Issue
Block a user