From 354e981384a16924d4ca69bead7ef59b9932ba55 Mon Sep 17 00:00:00 2001 From: marco370 <48531002-marco370@users.noreply.replit.com> Date: Fri, 17 Oct 2025 09:31:25 +0000 Subject: [PATCH] Ensure database import happens after schema updates Move the database import step to occur after database schema migrations are applied. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e5565357-90e1-419f-b9a8-6ee8394636df Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/e5565357-90e1-419f-b9a8-6ee8394636df/IgrJ2ut --- deploy/deploy.sh | 86 +++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/deploy/deploy.sh b/deploy/deploy.sh index bf6e747..18157fb 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -34,43 +34,8 @@ if [ -f .env ]; then source .env fi -# =================== IMPORT DATABASE DA GIT (se richiesto) =================== -if [ "$IMPORT_DB" = true ]; then - echo "📦 Import database da backup Git..." - - # Trova l'ultimo backup nella directory git - LATEST_GIT_BACKUP=$(ls -t $GIT_BACKUP_DIR/*.sql.gz 2>/dev/null | head -1) - - if [ -f "$LATEST_GIT_BACKUP" ]; then - echo "📥 Trovato backup: $LATEST_GIT_BACKUP" - - # Controlla che le variabili siano definite - if [ -z "$PGDATABASE" ] || [ -z "$PGUSER" ]; then - echo "❌ Variabili DB non trovate nel .env, impossibile importare" - exit 1 - fi - - # Chiedi conferma (opzionale - rimuovi se vuoi import automatico) - echo "⚠️ ATTENZIONE: Questo sovrascriverà il database corrente!" - echo "Backup da importare: $(basename $LATEST_GIT_BACKUP)" - read -p "Continuare? (s/n): " -n 1 -r - echo - - if [[ $REPLY =~ ^[Ss]$ ]]; then - # Decomprimi e importa - echo "🔄 Importazione database in corso..." - gunzip -c "$LATEST_GIT_BACKUP" | PGPASSWORD=$PGPASSWORD psql -h ${PGHOST:-localhost} -U $PGUSER --dbname=$PGDATABASE - echo "✅ Database importato con successo da Git!" - else - echo "❌ Import annullato dall'utente" - exit 1 - fi - else - echo "❌ Nessun backup trovato in $GIT_BACKUP_DIR" - exit 1 - fi -else - # =================== BACKUP DATABASE NORMALE =================== +# =================== BACKUP DATABASE NORMALE (se non import) =================== +if [ "$IMPORT_DB" != true ]; then echo "💾 Backup database pre-deployment..." mkdir -p $BACKUP_DIR BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql" @@ -108,9 +73,54 @@ export NODE_ENV=production npm run build # Database migrations (serve Drizzle che è devDependency) -echo "🗄️ Verifica database schema..." +# IMPORTANTE: Le migrazioni devono essere eseguite PRIMA dell'import dei dati +echo "🗄️ Aggiornamento schema database..." npm run db:push || echo "⚠️ Schema push skipped (database già aggiornato)" +# =================== IMPORT DATABASE DA GIT (dopo le migrazioni) =================== +if [ "$IMPORT_DB" = true ]; then + echo "📦 Import dati da backup Git..." + + # Trova l'ultimo backup nella directory git + LATEST_GIT_BACKUP=$(ls -t $GIT_BACKUP_DIR/*.sql.gz 2>/dev/null | head -1) + + if [ -f "$LATEST_GIT_BACKUP" ]; then + echo "📥 Trovato backup: $LATEST_GIT_BACKUP" + + # Controlla che le variabili siano definite + if [ -z "$PGDATABASE" ] || [ -z "$PGUSER" ]; then + echo "❌ Variabili DB non trovate nel .env, impossibile importare" + exit 1 + fi + + # Chiedi conferma + echo "⚠️ ATTENZIONE: Questo sovrascriverà i dati correnti del database!" + echo "Lo schema è già stato aggiornato con le migrazioni." + echo "Backup da importare: $(basename $LATEST_GIT_BACKUP)" + read -p "Continuare? (s/n): " -n 1 -r + echo + + if [[ $REPLY =~ ^[Ss]$ ]]; then + # NOTA: Il backup contiene --clean e ricreerà le tabelle + # Questo va bene perché contiene anche lo schema della versione corrente + echo "🔄 Importazione database completo (schema + dati)..." + gunzip -c "$LATEST_GIT_BACKUP" | PGPASSWORD=$PGPASSWORD psql -h ${PGHOST:-localhost} -U $PGUSER --dbname=$PGDATABASE + + # Ri-esegui le migrazioni per sincronizzare eventuali differenze + echo "🔄 Sincronizzazione schema dopo import..." + npm run db:push || echo "⚠️ Schema già sincronizzato" + + echo "✅ Database importato con successo da Git!" + else + echo "❌ Import annullato dall'utente" + exit 1 + fi + else + echo "❌ Nessun backup trovato in $GIT_BACKUP_DIR" + exit 1 + fi +fi + # NOTA: NON facciamo npm prune perché Vite serve a runtime per il middleware # Il server Express usa Vite per servire il frontend anche in produzione