Come gestire le modifiche dello schema del database nelle versioni del progetto open source

7

Gestisco un'applicazione web PHP / MySQL open source utilizzata da alcune scuole K-12 e da alcuni college. Sono anche l'unico sviluppatore del progetto. Mentre era poco più di un download sorgente di un'applicazione che il mio datore di lavoro ospita, ho lavorato durante l'ultimo anno per trasformarlo in un "vero" progetto open source, con documentazione, versioni numerate, modifiche al pubblico, ecc.

Sto cercando di migliorare il processo di aggiornamento e una delle aree potenzialmente dolorose (in particolare per le scuole affamate di competenze IT) riguarda le modifiche allo schema del database tra le versioni. Non tendono ad accadere spesso o sono cambiamenti drastici, ma apprezzerei i suggerimenti sul processo.

Attualmente, mantengo uno script di installazione SQL di base per configurare il database in una nuova installazione. Questo include lo schema completo per la versione corrente; non è richiesta alcuna ulteriore azione per una nuova installazione. Le modifiche che avvengono tra le versioni sono memorizzate in% script% di script, ed è necessario eseguire tutti gli script di aggiornamento in modo incrementale per tutte le versioni che sono state saltate.

Gli script di shell non sono una buona idea, perché molti dei nostri utenti operano su host senza accesso alla shell. A causa di altre priorità, è improbabile che un programma di installazione / aggiornamento del browser PHP complesso si materializzi. Tuttavia, mi piacerebbe fare qualcosa con uno script PHP basato su browser per semplificare gli aggiornamenti. Suggerimenti su come affrontarlo?

    
posta Michael 12.05.2011 - 20:42
fonte

3 risposte

2

Il mio progetto ha un file update.php che l'utente esegue attraverso il browser dopo aver installato una nuova versione del software. Lo script di aggiornamento controlla un numero di versione del database conservato in una tabella nel database attivo e qualsiasi database altera le operazioni che otterranno lo schema del database fino all'ultimo, che include l'aggiornamento del numero di versione del database.

    
risposta data 12.05.2011 - 21:01
fonte
1

Drupal CMS ha una soluzione interessante al tuo problema. Suggerisco di dare un'occhiata a Drupal in generale, se stai sviluppando soluzioni basate sul web usando PHP. È il mio CMS PHP preferito e sarò abbastanza di parte da dire che è il migliore in circolazione. ;)

Drupal offre un wrapper di interazione tra database piuttosto sofisticato. Permette di astrarre il tipo di database effettivo dallo sviluppatore del modulo, quindi non ti importa se il server sta eseguendo PostgreSQL, MySQL, ecc. Puoi anche creare la tua interfaccia. Ogni modulo è necessario per fornire il file module.install che contiene hook_schema e hook_install . hook_schema viene utilizzato per la dichiarazione dello schema di tabella per il modulo, mentre hook_install esegue la procedura di installazione. L'architettura supporta anche la nozione di aggiornamenti, quindi se l'utente ha già installato il modulo, vengono richiamati i ganci di aggiornamento giusti e consente di aggiornare facilmente lo schema della tabella.

Dai un'occhiata: link Anche se Drupal non fa per te, sono sicuro che puoi imparare qualcosa dalle loro decisioni architettoniche .

    
risposta data 12.05.2011 - 22:39
fonte
0

Abbiamo fatto questo creando cartelle di versione. Abbiamo inserito tutti gli script di database in quella cartella. Quando è arrivato il momento di distribuirlo a un nuovo cliente, hanno ottenuto l'ultima versione.

Abbiamo anche mantenuto gli script di aggiornamento in questa cartella. In questo modo potremmo migrare un cliente dalla versione x alla versione y.

Non è il metodo migliore ... ma ha funzionato per noi.

    
risposta data 12.05.2011 - 23:54
fonte

Leggi altre domande sui tag