it-swarm.it

Distribuzione di modifiche complesse

Occasionalmente è necessario implementare modifiche piuttosto complesse su un sito Web che richiedono modifiche ai database (tabelle nuove o modificate) e al codice sorgente dinamico (come PHP o ColdFusion). Qual è il modo migliore per impacchettare e distribuire queste modifiche rapidamente senza interrompere tutto sul sito Web live?

4
Justin Scott

Risposta breve: è un dolore al collo!

Ho dovuto farlo più volte (e ogni volta mi viene in mente di pensare al mio design più sul prossimo progetto che faccio). Quello che faccio è forkare il codebase in una sezione di sviluppo (o cartella, o server, ecc.) In modo che io possa lavorare su di esso separatamente per assicurarmi che tutti i bug siano eliminati prima di passare alla distribuzione. Quindi creo uno script SQL che ha sempre le stesse prime due righe:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Ciò garantirà che lo script inserisca tutto in un database completamente nuovo e vuoto. Il resto dello script ricrea tutte le tabelle che sto riutilizzando dal vecchio database a quello nuovo. Quindi creerò le nuove (o modificate) tabelle nel nuovo database. Infine sposterò tutti i dati dal server live al server di sviluppo. Questo può richiedere molto tempo a seconda della quantità di dati che stai spostando e della velocità con cui puoi spostarli, quindi ti consiglio di pensare attentamente allo script perché meno sei costretto a eseguirlo, meglio è.

Dopo aver installato e funzionante il nuovo database di sviluppo, il resto è creare il nuovo codice per usarlo. Una volta che è stato eliminato, la distribuzione dovrebbe essere relativamente semplice (anche se probabilmente richiede tempo). Basta usare lo stesso script per copiare tutti i nuovi dati live nel nuovo database sul server di distribuzione e copiare lì tutto il nuovo codice, e il gioco è fatto!

È così che lo faccio, e mentre è un dolore, funziona. Se c'è un modo migliore, sarei felice di ascoltare.

Aggiornamento: In risposta al commento di Tchalvak, sì, di solito uso quanto segue per ottenere tutte le definizioni di tabella senza i loro dati effettivi:

mysqldump --databases --no-data databaseName > newScript.sql

Modificherò quindi questo script come descritto sopra.

3
Mike

Per ottenere "la capacità di eseguire il rollback", suggerisco davvero di conoscere (bene) git oppure Mercurial(sistemi di controllo della versione distribuito) .

I giorni in cui dovresti lavorare con il tuo codice sorgente in file flat sono finiti (ora dovresti lavorare con esso in file flat ma avere un sistema di controllo delle modifiche davvero robusto che li rintracci).

2
Kzqai

In genere lo faccio (per i siti in stile LAMP):

  1. definisci le tue modifiche quindi scrivi uno script per applicarle (io uso un Makefile).
  2. Test le tue modifiche su un campione di dati che rappresenta l'ambiente reale
  3. Test di nuovo per essere sicuri
  4. Concediti una via d'uscita, hai la possibilità di eseguire il rollback

Se stai eseguendo un cluster, potresti avere grossi mal di testa con stato del sito, cache e così via.

0
Aiden Bell