Comment s'assurer que les modifications de base de données peuvent être facilement déplacées sur DVCS à l'aide de Django

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

Question

Présentation

Je construis un site web dans Django. Je dois permettre aux gens de commencer à ajouter des pages à plat et à définir certains paramètres dans l'admin. Ces modifications doivent être définitives, puisque ces informations proviennent du client. Cependant, je développe également le backend et, en tant que tel, je vais créer et migrer des tables. Je pousse ces changements vers le hub.

Outils

django

git

sud

postgres

Problème

Comment puis-je m'assurer que les modifications apportées à la base de données du site en ligne me parviennent sur mon ordinateur portable, et comment puis-je transférer mes modifications de la base de données vers le site actif, afin que nous ayons un minimum de coordination nécessaire? ? Je connais bien les crochets Git, cette option est donc en jeu.

Addendum:

Je suppose que je sais quelles tables peuvent être modifiées via l’administrateur. Il ne devrait pas y avoir beaucoup de chevauchement vraiment. Si je réfléchis un peu plus loin, le danger est vraiment de moi pousser des données qui écraseraient quelque chose qu’elles ont fait.

Merci.

Était-ce utile?

La solution

Pour que les modifications de schéma soient effectuées sur le serveur, utilisez simplement South. Si vous modifiez une table contenant des données, veillez à écrire à la fois une migration de schéma et, le cas échéant, une migration de données afin de préserver le sens de leurs données.

Pour vous remettre leurs données mises à jour (ce qui ne semble pas essentiel, mais qui pourrait être agréable de travailler avec des données de test actualisées pendant que vous développez), j'utilise généralement juste les fixtures Django et les dumpdata et commandes loaddata. Il est assez facile de vider un appareil et de l’envoyer dans votre dépôt, puis dans une donnée de chargement.

Vous pouvez utiliser git hook pour automatiser une partie de ces tâches, mais si vous souhaitez automatiser vos tâches, je vous recommande d'essayer quelque chose comme Fabric. Une grande partie de ce matériel n'a pas besoin d'être exécuté à chaque fois que vous poussez / tirez (en particulier, je ne voudrais généralement pas vider un nouvel appareil de données aussi fréquemment).

Autres conseils

Vous devriez probablement jeter un coup d'œil au Sud:

http://south.aeracode.org/

Il me semble que vous pourriez probablement créer un hook git qui se déclenche au sud si vous utilisez une sorte de système d'intégration continue.

Sinon, chaque fois que vous effectuez un push, vous devrez exécuter manuellement les étapes de migration vous-même. N'oubliez pas de mettre en place le "Site en cours de maintenance". message. ;)

Je vous recommande d'utiliser mk-table-sync pour extraire les modifications du serveur live vers votre ordinateur portable. mk-table-sync prend beaucoup de paramètres afin que vous puissiez automatiser ce processus en utilisant fabric . En gros, vous créeriez une fonction de matrice qui exécute mk-table-sync sur chaque tablette que vous souhaitez extraire du serveur.

Cela signifie que vous ne pouvez pas modifier vous-même les modifications de la base de données, car elles seront écrasées par l'extraction.

Les seules modifications que vous apporteriez à la base de données dynamique utilisent South. Vous transmettez le code au serveur, puis exécutez migrate pour mettre à jour le schéma de base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top