38 votes

Meilleures pratiques de développement / déploiement de Django et VirtualEnv

Juste curieux de voir comment les gens sont le déploiement de leurs projets Django en combinaison avec virtualenv

  • Plus précisément, comment gardez-vous votre production virtualenv est synchronisé correctement avec votre machine de développement?

J'utilise git pour scm mais je n'ai pas mon virtualenv à l'intérieur du repo git - dois-je, ou est-il préférable d'utiliser le pip freeze et puis re-créer l'environnement sur le serveur en utilisant le gel de sortie? (Si vous faites cela, pourriez-vous décrire les étapes que je viens de trouver que très peu de documentation sur le déblocage du processus - est quelque chose comme pip install -r freeze_output.txt possible?)

21voto

brianz Points 3528

Je viens de mettre quelque chose comme cela, au travail, à l'aide de pip, le Tissu et git. Le débit est un peu comme cela, et s'inspire fortement de ce script:

  1. Dans notre arborescence des sources, nous maintenons un requirements.txt fichier. Nous allons maintenir manuellement.
  2. Quand nous faisons une nouvelle version, le Tissu script crée une archive basée sur tout treeish nous le transmettre.
  3. Tissu trouverez le SHA de ce que nous sommes déployer avec l' git log -1 --format=format:%h TREEISH. Qui nous donne de l' SHA_OF_THE_RELEASE
  4. Tissu aura le dernier SHA pour nos exigences fichier git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt. Ce crache la version courte de la table de hachage, comme 1d02afc qui est le SHA de ce fichier pour cette version en particulier.
  5. Le Tissu script sera alors regardez-vous dans le répertoire où notre virtualenvs sont stockés sur le serveur distant(s).
    1. Si il n'y a pas un répertoire nommé 1d02afc, un nouveau virtualenv est créé et le programme d'installation avec pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt
    2. Si il est une existante path/to/venv/1d02afc, rien n'est fait

Le peu de magie partie de ce passe quelque arbre-ish vous voulez git, et de faire de l'emballage (à partir de Tissu). En utilisant git archive my-branch, git archive 1d02afc ou tout autre chose, je suis assuré d'obtenir les paquets installé sur mes machines distantes.

Je suis allé cet itinéraire car je n'avais vraiment pas envie d'avoir un surplus de virtuenvs flottant autour de si les lots n'ont pas changé entre la libération. Je n'aime pas l'idée d'avoir les paquets réels j'ai confiance dans mon propre arborescence des sources.

4voto

thraxil Points 1681

J'utilise cette bootstrap.py: http://github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py

qui s'attend à ce répertoire sont appelés les "besoins" qui ressemble à quelque chose comme ceci: http://github.com/ccnmtl/ccnmtldjango/tree/master/ccnmtldjango/template/requirements/

Il y a un apps.txt un libs.txt (qui apps.txt comprend--je voudrais juste garder django apps séparé de l'autre des modules python) et un répertoire src qui contient les archives.

Lors de l' ./bootstrap.py est exécuté, il crée le virtualenv (nettoyage d'un précédent s'il existe) et l'installe tout de requirements/apps.txt en elle. Je ne jamais installer quoi que ce soit dans le virtualenv autrement. Si je veux inclure d'une nouvelle bibliothèque, j'ai mis l'archive en exigences/src/, ajouter une ligne à l'un des fichiers texte et de ré-exécuter ./bootstrap.py.

bootstrap.py exigences et obtenir vérifié dans le contrôle de version (ou une copie de pip.py donc, je n'ai même pas de l'avoir installée n'importe où). Le virtualenv lui-même ne l'est pas. Les scripts que j'ai qui poussent à la production ./bootstrap.py sur le serveur de production à chaque fois que je pousse. (bootstrap.py va également à quelques longueurs pour s'assurer que c'est de coller à Python 2.5 puisque c'est ce que nous avons sur les serveurs de production (Ubuntu Hardy) et ma machine de dev (Ubuntu Karmic) la valeur par défaut de Python 2.6 si vous ne faites pas attention)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X