Django et virtualenv développement / déploiement des meilleures pratiques
-
19-09-2019 - |
Question
Juste curieux de voir comment les gens déploient leurs projets Django en combinaison avec virtualenv
- Plus précisément, comment voulez-vous maintenir votre production virtualenv correctement cette synched avec votre machine de développement?
J'utiliser git pour scm mais je n'ai pas mon virtualenv dans le git - devrais-je, ou est-il préférable d'utiliser le gel de pépin, puis recréer l'environnement sur le serveur en utilisant la sortie de gel? (Si vous faites cela, pourriez-vous s'il vous plaît décrire les étapes - je trouve très peu de bonne documentation sur le processus dégeler - est quelque chose comme pip install -r freeze_output.txt
possible)
La solution
Je viens de mettre quelque chose comme ça au boulot en utilisant pip, tissu et git. Le flux est essentiellement comme ça, et emprunte beaucoup ce script :
- Dans notre arbre source, nous maintenons un fichier requirements.txt. Nous allons maintenir manuellement.
- Lorsque nous faisons une nouvelle version, le script crée une archive Fabric basé sur ce que treeish nous transmettons.
- Tissu trouvera le CSA pour ce que nous déployons avec
git log -1 --format=format:%h TREEISH
. Cela nous donneSHA_OF_THE_RELEASE
- Tissu aura le dernier CSA pour nos besoins fichier avec
git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt
. Cette recrache la version courte du hachage, comme1d02afc
qui est le CSA pour ce fichier pour cette version particulière. - Le script de tissu alors regarder dans un répertoire où nos virtualenvs sont stockés sur l'hôte distant (s).
- S'il n'y a pas un répertoire nommé
1d02afc
, un nouveau virtualenv est créé et configuré avecpip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt
- Si est une
path/to/venv/1d02afc
existante, rien ne se fait
- S'il n'y a pas un répertoire nommé
La petite partie de cette magie passe tout arbre ISH vous voulez git, et l'avoir fait l'emballage (en tissu). En utilisant git archive my-branch
, git archive 1d02afc
ou tout autre chose, je suis sûr d'obtenir les bons paquets installés sur mes machines distantes.
Je suis allé dans cette voie car je ne voulais vraiment pas avoir virtuenvs supplémentaires flottant autour si les paquets n'avaient pas changé entre la libération. Je n'aime pas non plus l'idée d'avoir les paquets réels je dépends dans mon propre arbre source.
Autres conseils
J'utilise cette bootstrap.py: http: // github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py
qui sont attend répertoire appelé 'exigences' qui ressemble à ceci: