Gestione delle modifiche al database durante gli aggiornamenti dei moduli in PrestaShop

C’è un tipo di richiesta di assistenza che ho imparato a temere. Un commerciante aggiorna un modulo; l’aggiornamento sembra andare a buon fine, poi qualcosa smette di funzionare. Mai l’intero negozio. Una pagina del controller di PrestaShop che non funziona correttamente, o un valore di configurazione che non viene salvato, o una colonna di un elenco prodotti che si è svuotata. Quando controllo, il codice del modulo è aggiornato alla nuova versione, ma il database sottostante è ancora quello vecchio.

Questo articolo si propone di affrontare proprio questa lacuna. Un modulo PrestaShop non è solo il codice PHP che hai distribuito, ma include anche le tabelle e le colonne che il codice PHP si aspetta di trovare. Se si salta l’aggiornamento del database di PrestaShop, che dovrebbe essere incluso in ogni nuova versione del codice, si ottiene un modulo installato, apparentemente funzionante, ma in realtà errato.

L’ho fatto a me stesso più di una volta. Quello che segue è ciò che ho imparato a riguardo aggiornamenti del database del modulo PrestaShop, nel modo più difficile.

1.0 Come gli aggiornamenti dei moduli PrestaShop gestiscono effettivamente il database

Il passaggio del negozio dall’aggiornamento 1.9.0 al 2.1.0 non salta alcun passaggio, ma esegue tutti gli script di aggiornamento intermedi, in ordine.

Qui circolano molte supposizioni, e alcune sono errate.

Inserisci una nuova versione in /moduli/ e la tua routine di installazione non viene eseguita di nuovo. Tabelle intatte. Cosa succede invece: PrestaShop legge il modulo aggiornamento / cartella, trova i file denominati aggiornamento- .php si posiziona tra la versione registrata e quella dichiarata dalla classe del tuo modulo, ed esegue entrambe in sequenza.

Un negozio con versione 1.9.0 che riceve la versione 2.1.0 esegue tre script, in sequenza.

Da ciò derivano tre cose, e tutte e tre sono importanti per modifiche al database di PrestaShop.

La versione presente nella tabella `module` è la fonte di verità. Non quello presente nel file di classe principale. PrestaShop li legge entrambi. Agisce su quello registrato, ed è quello che determina quanti script di aggiornamento verranno eseguiti.

Il tuo metodo `install()` è valido solo per le nuove installazioni. Diciamo che la versione 2.0 ha bisogno di una nuova tabella. Inseriscila in installare() Chiunque passi alla versione 2.0 da zero è coperto. Il negozio che ha la versione 1.9 non riceve nulla, perché l’installazione è stata eseguita un anno fa e non verrà più eseguita.

Un singolo errore blocca tutto. Rientro falso Quando si esegue un aggiornamento, accadono tre cose: PrestaShop si blocca, registra la versione che ha causato l’errore e disabilita il modulo. Non è possibile passare allo script successivo. Questo comportamento è intenzionale, anche se significa che una modifica dello schema applicata solo parzialmente non risolve completamente il problema, ma lo disabilita.

Migliori attivazione dell’aggiornamento automatico per i moduli Questa pagina illustra le regole per la denominazione dei file. Leggetela attentamente una volta, anziché cercarla a memoria.

La trappola di denominazione della funzione di aggiornamento

Questo mi è costato un pomeriggio. modulo_di_aggiornamento_2_0_1 or modulo di aggiornamento201 funziona come nome di funzione e PrestaShop cerca entrambi. Inoltre, prima di includere il file, verifica se uno di questi nomi esiste già. Se lo trova, il file viene contrassegnato come duplicato e ignorato.

Copiare un vecchio script di aggiornamento come modello è esattamente il modo in cui le persone arrivano a questo punto. Il nome al suo interno non viene mai modificato. Non viene eseguito alcun aggiornamento e il messaggio di errore non fornisce molte informazioni.

2.0 Migrazione del database di PrestaShop: cosa va storto nei negozi reali

Tutto ciò è accaduto nei negozi in cui ho lavorato.

Modifiche allo schema del database di PrestaShop che si spostano tra le installazioni

La versione 2.0 necessita di una nuova colonna, quindi si aggiorna installare() e scrivere uno script di aggiornamento. Entrambe le opzioni sono corrette. Dopo tre versioni, qualcuno rinomina la cartella del modulo o un rivenditore reinstalla. In alcune installazioni, install() ha creato quella colonna. In altre, l’ha fatto il percorso di aggiornamento. Due definizioni, che si discostano, e ora un singolo numero di versione le copre entrambe.

Quindi la definizione risiede in un singolo metodo chiamato da entrambi i percorsi. Le modifiche allo schema del database di PrestaShop non possono derivare se ce n’è solo uno.

Script di aggiornamento che presuppongono un punto di partenza pulito

ALTER TABLE … ADD COLUMN Se si verifica un errore su una colonna già esistente, la funzione restituisce false e il modulo viene disabilitato. Se si interrompe un aggiornamento precedente, si ripristina un backup parziale o si sincronizza due volte dall’area di staging, si finisce nel problema.

Ogni modifica dello schema che scrivo ora controlla prima. L’aggiunta di una colonna significa un MOSTRA COLONNE prima, creare una tabella significa MOSTRA LE TABELLE, un indice significa MOSTRA INDICE. Poche righe e lo script sopravvive a una seconda esecuzione. Questo è importante, perché il database di uno sconosciuto può trovarsi in qualsiasi stato. C’è SE NON ESISTE in entrambi MySQL e MariaDBma solo su alcune operazioni, quindi il controllo esplicito funziona meglio.

Multistore: righe di configurazione scritte solo per un singolo negozio

Silenzioso e insidioso, questo. Nella nuova versione è arrivata un’impostazione per singolo negozio. Riga predefinita creata dallo script di aggiornamento, testata dallo sviluppatore, tutto sembra a posto. Ma è stata scritta una riga, per il negozio in questione, e il commerciante ne gestisce quattro.

Ora mancano tre negozi. A seconda di come il tuo codice lo interpreta, ricevi un avviso PHP, un valore vuoto trattato come un’impostazione reale o uno spazio vuoto dove dovrebbe esserci un prezzo. documentazione multi-negozio copre le regole di contesto. Esegui un ciclo su ogni ID negozio in qualsiasi aggiornamento che coinvolga la configurazione o i dati specifici del negozio.

In un’installazione a negozio singolo, questo bug è invisibile.

ALTER TABLE blocca le grandi tabelle dei cataloghi

L’aggiunta di una colonna a una tabella di 400,000 righe non è mai istantanea. A seconda dell’operazione, della versione di MySQL e del motore di archiviazione, potrebbe essere necessario copiare l’intera tabella. In un negozio online attivo, durante l’orario di negoziazione, questo blocco dura abbastanza a lungo da essere notato dai clienti.

Quindi, prima di scrivere la migrazione, verifico le dimensioni della tabella. Se è grande: finestra di manutenzione, oppure ristrutturazione per evitare la ricostruzione.

La chiave di configurazione senza valore predefinito

Quello che vedo più spesso nei moduli di altri, e non prevede l’uso di tabelle.

Aggiungi un’impostazione nella nuova versione. Il modulo di amministrazione la legge. Così come il front controller. Entrambi sono stati scritti su una macchina in cui la pagina delle impostazioni era già stata salvata almeno una volta. Quindi la chiave esiste e tutto sembra a posto. Distribuiscila e ogni installazione esistente sta leggendo un Configurazione chiave che nessuno ha mai scritto.

Ciò che ritorna è falsoIl tuo valore predefinito non viene mai visualizzato, né una stringa vuota che potresti almeno verificare. Da lì viene utilizzato come numero o passato a una funzione che richiedeva una stringa. Con la modalità di debug disattivata, spesso te la cavi: il commerciante vede una pagina leggermente errata e non ci pensa due volte. Con la modalità di debug attivata, l’errore si manifesta come una notifica o un errore di tipo. Ed è così che ti arriva la notizia che “il modulo si blocca in modalità di debug”, quando in realtà solo la modalità di debug è effettivamente coinvolta.

Lo stesso codice, con e senza l’impostazione predefinita.

La soluzione è banale. Ogni nuova chiave di configurazione ha il suo valore predefinito scritto nello script di aggiornamento, per ogni negozio, distribuito insieme al codice che lo legge. Leggetelo con attenzione, perché non potete essere certi che l’aggiornamento sia andato a buon fine.

Migrazione del database del modulo PrestaShop rispetto alla modifica dello schema.

Le modifiche allo schema sono la parte più semplice. La parte difficile inizia quando cambia il significato dei dati esistenti: dividere una colonna in due, spostare un campo CSV in una tabella correlata, ricodificare uno stato.

È lì che ho visto i danni maggiori. Un lavoro mal riuscito ALTER TABLE Fallisce rumorosamente; una trasformazione dei dati mal riuscita ha successo e scrive cose senza senso. Una migrazione del database di un modulo PrestaShop che sposta i dati richiede un conteggio prima e dopo, quindi un confronto. Meglio scoprirlo all’interno dello script di aggiornamento che da un commerciante tre settimane dopo.

Migliori pratiche per l’aggiornamento del modulo PrestaShop 3.0 che difenderei senza esitazione

Coloro che mi hanno salvato:

Rendere ogni migrazione idempotente

Nulla dovrebbe cambiare nella seconda esecuzione che la prima esecuzione non abbia già gestito. Ottieni quella proprietà e un’intera categoria di problemi di supporto scompare, perché lo stato del database smette di essere qualcosa che devi stabilire prima. Prima di scrivere SQL grezzo sulle tabelle principali, PrestaShop note sui livelli del database valgono un’ora.

La versione protetta sopravvive a una seconda esecuzione.

Registra ogni errore invece di restituire automaticamente false

Un nudo restituire false Questo è sufficiente perché PrestaShop si fermi e disabiliti il ​​modulo. Non è sufficiente per te. Quindi, completa il lavoro. Cattura tutto ciò che ne deriva e passalo a PrestaShopLogger con il nome e la versione del modulo allegati. Altrimenti, un commerciante segnala un aggiornamento fallito e tu vai a tentoni.

Su PHP 7 e versioni successive, cattura Errore così come Eccezione. Ricevi un errore di tipo nel tuo codice di migrazione e arriva come un Errore, quindi un gestore che guarda solo per Eccezione lo lascia passare.

Supporta ogni versione che hai mai rilasciato

Un commerciante può utilizzare qualsiasi versione rilasciata. Chi passa dalla versione 1.4 alla 3.0 esegue tutti gli script intermedi, in ordine, quindi ognuno deve funzionare con lo schema lasciato in eredità dal precedente. Ecco perché i vecchi file di aggiornamento rimangono nel modulo. Chi è rimasto indietro di due anni non ha altra via d’uscita.

Eseguire il test sull’ambiente di staging, non su un’installazione locale pulita.

Una nuova installazione della nuova versione non dimostra nulla riguardo all’aggiornamento. Quello che dovresti fare invece è: installare la vecchia versione, inserire dati realistici e poi aggiornare. Anche su più store, se lo supporti.

Meglio ancora: prendi una copia di un negozio reale e passa l’aggiornamento attraverso quello. La tua installazione locale ha dati puliti e quattro prodotti, ecco perché non mostra nulla. Un negozio reale ha importazioni incomplete, righe lasciate da un modulo disinstallato due anni fa, colonne aggiunte a mano da un precedente sviluppatore, un catalogo abbastanza grande da ALTER TABLE ci vuole un po’ di tempo.

Poi c’è la questione dei tempi. È più facile capire se un aggiornamento richiede sei minuti, basandosi su dati reali, quando si prenota una finestra di manutenzione, piuttosto che alle undici di venerdì.

Eseguite un backup prima di apportare modifiche allo schema e comunicatelo.

Prima di un aggiornamento di un modulo, non viene creata alcuna istantanea delle tabelle. Né da PrestaShop, né da nessun altro sistema. Quindi, se il commerciante non ha un backup e la migrazione si interrompe a metà della trasformazione dei dati, quei dati andranno persi. È meglio specificarlo nel registro delle modifiche, piuttosto che scoprirlo insieme.

Recupero di un aggiornamento del database di PrestaShop non riuscito

Aggiornamento non riuscito su un negozio online; modulo disabilitato. All’incirca in quest’ordine:

Scopri quale versione ha fallito. Questa operazione viene registrata e, se hai scritto un messaggio di log, sarà presente anche quello. Insieme, saprai quale script aprire e quali modifiche sono state applicate prima dell’interruzione.

Verifica lo schema effettivo, non il numero di versione. Tutto l’ modulo La tabella conosce ciò che l’ultimo aggiornamento riuscito ha scritto. Le tabelle reali sono dove si trova la risposta, confrontate con qualunque cosa lo script fallito stesse cercando di fare.

Puntare in avanti, non indietro. Ripristinare la versione precedente è allettante, ma di solito sbagliato, perché gli script precedenti sono già stati eseguiti e rieseguirli su uno schema parzialmente modificato trasforma un problema in tre. Scrivi una migrazione correttiva dallo schema attuale a quello corretto.

Quindi bisogna capire perché la migrazione non è stata idempotente. Questo è il vero bug.

Una breve lista di controllo prima di rilasciare un aggiornamento del modulo

Ecco la lista che gestisco:

  1. Versione principale della classe, la più alta aggiornamento-*.php file: corrispondono?
  2. Ogni funzione di aggiornamento prende il nome dalla versione del proprio file?
  3. Ogni modifica allo schema verifica prima se è già stata applicata.
  4. Ogni configurazione viene scritta ciclicamente su tutti i negozi?
  5. Ogni nuova chiave di configurazione riceve un valore predefinito per le installazioni esistenti?
  6. Hai già effettuato una prova su una riproduzione di un negozio reale?
  7. È stata installata la vecchia versione, sono stati aggiunti i dati e poi è stato effettuato l’aggiornamento?
  8. Stesso percorso su più negozi?
  9. Qualcosa di utile registrato prima di ogni restituire false?
  10. attraente Errore così come Eccezione?
  11. Vecchi file di aggiornamento sono ancora presenti per i commercianti con versioni precedenti di diverse settimane?
  12. Registro delle modifiche che invita i commercianti a fare un backup?
  13. Su un tavolo grande, quanto è lungo? ETÀ stai tenendo un lucchetto?

Gli elementi 6 e 7 sono quelli che le persone saltano, e insieme riescono a cogliere la maggior parte del problema.

Conclusione

Aggiornamento del modulo PrestaShop I problemi sono scomodi per un motivo: non c’è alcun preavviso. Il modulo segnala la sua nuova versione senza problemi. La pagina di amministrazione si carica. Nessun log, a meno che non li abbiate scritti voi. Nel frattempo, il vostro codice si aspetta una cosa, il database ne contiene un’altra, e quest’ultima rimane invariata finché qualcuno non utilizza la funzionalità che si trova nel mezzo.

Tratta lo schema come parte della release. Scrivi migrazioni che sopravvivano a una seconda esecuzione. Registra cosa è successo. Mettilo in staging prima che lo faccia qualsiasi commerciante. Lato framework, PrestaShop documentazione per lo sviluppo del modulo è il punto di partenza.

Se hai domande o hai bisogno di assistenza per le prestazioni o la migrazione del tuo sito web, i nostri esperti sono qui per aiutarti. Contatta il team di Knowband all’indirizzo [email protected] Oggi stesso potrete usufruire di plugin per e-commerce affidabili e personalizzati in base alle vostre esigenze.

Novità di PrestaShop 9.0? Guida completa alle funzionalità e alla migrazione

Perché PrestaShop?

PrestaShop è una piattaforma di e-commerce open source leader nel settore, nota per la sua flessibilità, le sue potenti funzionalità e l’assenza di costi di licenza. Nota per la sua interfaccia intuitiva, il supporto multilingua/valuta e il ricco ecosistema di moduli e temi, è ideale per le PMI che creano negozi online personalizzati. PrestaShop 9.0 rappresenta una pietra miliare significativa, offrendo aggiornamenti delle prestazioni e innovazioni architetturali essenziali che riflettono i moderni standard di sviluppo, la scalabilità e la manutenibilità a lungo termine.

Quali sono le novità di PrestaShop 9.0?

PrestaShop 9.0 apporta una modernizzazione completa del framework di base: un grande passo avanti che ridefinisce il modo in cui sviluppatori e proprietari di negozi interagiscono con il sistema.

Modifiche all’architettura di base

Integrazione completa con Symfony: PrestaShop 9 completa la transizione al framework Symfony, fornendo una base moderna e stabile per lo sviluppo futuro. Classi legacy e controller obsoleti sono stati deprecati o sostituiti, rendendo il sistema più manutenibile e allineato alle best practice.

Supporto PHP 8.1+: Richiede PHP 8.1 o versione successiva, garantendo compatibilità con le funzionalità più recenti, maggiore sicurezza e prestazioni più rapide.

Dottrina DBAL:Il livello di astrazione del database migliora le interazioni con il database, offrendo una migliore astrazione, creazione di query e testabilità, particolarmente utile per le personalizzazioni su larga scala.

Sviluppo incentrato sul compositore: Composer 2.x ora svolge un ruolo centrale nel flusso di lavoro di sviluppo, gestendo la gestione delle dipendenze, l’integrazione dei moduli e il caricamento automatico senza problemi. Ciò semplifica il controllo delle versioni e migliora la compatibilità CI/CD.

Miglioramenti di back office e sviluppatori

Concentrandosi sui miglioramenti del backend, commercianti e sviluppatori noteranno:

  • Caricamenti delle pagine più rapidi e tempi di risposta del server migliorati
  • Base di codice più pulita grazie alla rimozione della logica legacy
  • Modularità migliorata per moduli più puliti e autonomi
  • Copertura di test più solida per versioni stabili e sicure

Sebbene le modifiche all’interfaccia utente siano minime, questi aggiornamenti introduttivi migliorano notevolmente la stabilità e la manutenibilità dello store.

Guida alla migrazione: da PrestaShop 8 a 9

Metodo 1: Aggiornamento con un clic (consigliato)

Strumenti disponibili:

  • Modulo di aggiornamento ufficiale 1-Click: il modulo di aggiornamento standard di PrestaShop gestisce automaticamente le transizioni di versione
  • MigrationPro: soluzione di terze parti che supporta la migrazione con trasferimento dati completo
  • PrestaShop Migrator: soluzione alternativa con un clic per aggiornamenti senza interruzioni

vantaggi:

  • Processo automatizzato con intervento manuale minimo
  • Controlli di integrità dei dati integrati
  • Riduzione del rischio di errore umano
  • Tempo di migrazione più rapido
  • Creazione automatica di backup

Processo di backup con aggiornamento automatico:

  1. BackupInitialization: avvio del processo, cancellazione dei file temporanei rimanenti
  2. BackupFiles: backup completo di file di archivio, temi, moduli, immagini e codice personalizzato
  3. BackupDatabase: crea un backup completo dell’intero database, incluse tutte le tabelle e i dati memorizzati.
  4. Fammi sapere se preferisci una versione più concisa o più dettagliata.
  5. BackupComplete: Finalizzazione del processo con verifica

Processo di rollback:Se durante l’aggiornamento si verificano problemi, è possibile ripristinare facilmente l’operazione tramite la sezione “Rollback” del modulo di aggiornamento automatico, selezionando l’archivio di backup e monitorando l’avanzamento del rollback.

Migrazione dei dati: Gestisce automaticamente il trasferimento di prodotti, categorie, attributi, account clienti, cronologia ordini, pagine CMS, impostazioni di configurazione, immagini e configurazioni di moduli compatibili.

Metodo 2: migrazione manuale (che richiede molto tempo)

Nuova installazione di PrestaShop 9 seguita dalla migrazione manuale dei dati.

Panoramica del processo:

  1. Esaminare i requisiti del server: PHP 8.1+, MySQL 5.7+/MariaDB 10.3+, Composer 2.x, Apache/Nginx
  2. Backup completo: Database, file, configurazione, codice personalizzato
  3. Installa PrestaShop 9.0: Nuova installazione tramite Git e Composer
  4. Strategia di migrazione dei dati: Esporta da PS8 (prodotti, clienti, ordini, CMS, configurazioni) e importa in PS9 utilizzando strumenti nativi, moduli di terze parti o inserimento manuale
  5. Valutazione della compatibilità del modulo: Verifica i moduli esistenti, aggiorna quelli compatibili, identifica alternative per i moduli incompatibili
  6. Ricostruzione del tema: Ricostruisci i temi utilizzando l’architettura aggiornata di PS9, adattandoli ai requisiti di Symfony
  7. Test completo: Funzionalità di front office (navigazione, checkout, pagamenti, mobile) e back office (gestione prodotti, ordini, reporting)

Consigli

Metodo 1 (aggiornamento con un clic) è fortemente consigliato per la maggior parte dei commercianti perché:

  • Tempo di migrazione significativamente ridotto
  • Minor rischio di perdita/corruzione dei dati
  • Gestione automatizzata di relazioni di dati complesse
  • Funzionalità di rollback integrate
  • Disponibilità di supporto professionale

Prendere in considerazione il Metodo 2 (migrazione manuale) solo per requisiti di personalizzazione specifici che richiedono una nuova installazione o quando gli strumenti automatizzati non sono compatibili.

Lista di controllo post-migrazione

Indipendentemente dal metodo scelto:

  • Verificare tutte le funzioni critiche del negozio
  • Prova le integrazioni di pagamento e spedizione
  • Conferma le impostazioni SEO e le strutture URL
  • Aggiorna i certificati DNS e SSL se necessario
  • Monitora le prestazioni del sito e la velocità di caricamento
  • Formare il personale sulle modifiche dell’interfaccia

Considerazioni finali

PrestaShop 9.0 traccia un percorso deciso verso una maggiore velocità, una maggiore sicurezza e un ecosistema più incentrato sugli sviluppatori. Sebbene l’aggiornamento richieda pianificazione e impegno, i vantaggi a lungo termine sono considerevoli: prestazioni migliori, codice più pulito, maggiore scalabilità e strumenti moderni.

Se utilizzi una versione precedente, valuta il valore a lungo termine del passaggio a PrestaShop 9. In caso di dubbi sulla procedura o in assenza di sviluppatori interni, è altamente consigliato consultare un esperto PrestaShop o un partner certificato.

Stai ancora decidendo se cambiare?

Se non sei sicuro che passare da PrestaShop 8 a 9 sia la scelta giusta per il tuo negozio, ti invitiamo a dare un’occhiata al nostro confronto dettagliato e ai consigli dei nostri esperti.

Scopri i principali vantaggi, i potenziali rischi e l’impatto concreto della migrazione e prendi una decisione informata per la tua azienda.

Esplora la guida comparativa tra PrestaShop 8 e 9