Come garantire che le modifiche al database possano essere facilmente spostate su DVCS usando django

StackOverflow https://stackoverflow.com/questions/1646074

Domanda

Panoramica

Sto costruendo un sito Web in Django. Devo consentire alle persone di iniziare ad aggiungere pagine piatte e impostare alcune impostazioni nell'amministratore. Queste modifiche dovrebbero essere definitive, poiché tali informazioni provengono dal client. Tuttavia, sto anche sviluppando il backend e come tale creerò e migrerò tabelle. Spingo queste modifiche all'hub.

Strumenti

django

git

south

postgres

Problema

Come posso assicurarmi di ricevere le modifiche del database dal sito online su di me con il mio lappy, e anche come posso spingere le mie modifiche al database sul sito live, in modo da avere un minimo di coordinamento necessario ? Conosco i git hook, quindi questa opzione è in gioco.

Addendum:

Suppongo di sapere quali tabelle possono essere modificate tramite l'amministratore. Non ci dovrebbero essere molte sovrapposizioni davvero. Considerando ulteriormente, il pericolo è davvero me spingere dati che sovrascriverebbero qualcosa che hanno fatto.

Grazie.

È stato utile?

Soluzione

Per ottenere le modifiche dello schema sul server, basta usare Sud con attenzione. Se modifichi una tabella in cui potrebbero contenere dati, assicurati di scrivere sia una migrazione dello schema sia una migrazione dei dati, se necessario, per preservare il senso dei loro dati.

Per riportare i loro dati aggiornati su di te (il che non sembra critico, ma potrebbe essere bello lavorare con dati di test aggiornati mentre stai sviluppando), generalmente uso solo i dispositivi Django e i dumpdata e comandi loaddata. È abbastanza facile scaricare un dispositivo e impegnarlo nel tuo repository, quindi un loaddata alla tua estremità.

Potresti provare a usare git hook per automatizzare un po 'di tutto questo, ma se vuoi l'automazione ti consiglio di provare qualcosa come Fabric. Gran parte di questo materiale non deve essere eseguito ogni volta che si spinge / tira (in particolare, di solito non vorrei scaricare un nuovo dispositivo di dati così frequentemente).

Altri suggerimenti

Probabilmente dovresti dare un'occhiata a Sud:

http://south.aeracode.org/

Mi sembra che potresti creare un git hook che si inneschi a sud se stai facendo una sorta di sistema di integrazione continua.

Altrimenti, ogni volta che fai una spinta dovrai eseguire manualmente i passaggi della migrazione. Non dimenticare di installare il "sito in manutenzione" Messaggio. ;)

Ti consiglio di usare mk-table-sync per porta le modifiche dal server live al tuo laptop. mk-table-sync accetta molti parametri in modo da poter automatizzare questo processo usando fabric . Fondamentalmente si creerebbe una funzione fabric che esegue mk-table-sync su ogni tablet che si desidera estrarre dal server.

Ciò significa che non è possibile apportare modifiche dabatase da soli, poiché verranno sovrascritte dal pull.

Le uniche modifiche che vorresti apportare al database live stanno usando Sud. Devi inviare il codice al server e quindi eseguire migra per aggiornare lo schema del database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top