Je suis un développeur Web travaillant seul avec Django, et j'essaie de me faire tourner la tête sur la meilleure façon de déployer des sites à l'aide de Mercurial. Ce que j'aimerais avoir, c'est que je puisse garder un référentiel que je puisse utiliser pour les travaux de production et de développement. Il y aura toujours des différences entre la production / le développement (par exemple, ils pourraient utiliser différentes bases de données, le développement aura toujours du débogage) mais d'une manière générale, elles seront synchronisées. J'aimerais également pouvoir apporter des modifications directement sur le serveur de production (rangée HTML ou CSS, de bugfixes simples, etc.). P>
Le flux de travail que j'ai l'intention d'utiliser pour ce faire est comme suit: p>
Remarque: vous pouvez également apporter des modifications directement à pousser tant que vous transposez les modifications dans Dev. p>
Ce flux de travail a l'inconvénient que chaque fois que vous effectuez une modification, vous devez non seulement l'engager à la branche qui vous entraîne, vous devez également le transplanter à l'autre branche. Y a-t-il une façon plus judicieuse de faire ce que je veux ici, peut-être utiliser des patchs? Ou à défaut, existe-t-il un moyen d'automatiser le processus de validation de transplanter automatiquement la modification de l'autre branche et serait-ce une bonne idée? P>
5 Réponses :
J'essaie peut-être quelque chose comme ceci: (Je pensais juste à cette question, dans mon cas c'est une base de données SQLite) p>
Params.py code> à .hgignore, pour le garder hors du référentiel. Li>
- Prenez vos fichiers
Params.py (code> des deux branches distinctes et déplacez-les en deux fichiers distincts, paramètres-prod.py code> et paramètres-dev.py code> li>
- Créez un script de déploiement qui copie le fichier Paramètres approprié-x sur Paramètres.py, afin que vous puissiez déployer de toute façon. LI>
ul>
Si vous avez quelques fichiers supplémentaires, faites la même chose pour eux. Si vous avez beaucoup de fichiers, mais ils sont tous dans le même répertoire par elles-mêmes, vous pouvez simplement créer une paire de répertoires: production code> et développement code>, puis en copie ou symbolique le approprié dans un répertoire code> code>. p>
Si vous avez fait quelque chose comme ça, vous pourriez vous dispenser avec la nécessité de ramifier votre référentiel. P>
J'aime cette approche en raison de son manque de succursales, j'utilise en fait un autre déjà similaire. Au lieu de faire 2 fichiers de paramètres, je crée un répertoire des paramètres et mettez un fichier __ init __. Py code> fichier ajoutez mes fichiers de paramètres de connexion, PROD.PY et DEV.PY (idée levée de ce blog: < Un href = "http://blog.haydon.id.au/2009/07/django-development-workflow.html" rel = "nfollow noreferrer"> blog.haydon.id.au/2009/07/django-development -workflow.h tml ). Ensuite, il suffit de symboliser le bon script WSGI dans. Mais malheureusement, je dois modifier également certains modèles, la production utilise des versions minissiques de JavaScript et de Dev Utilisations non ciindifiées, et je ne pense pas que je puisse le faire sans que je puisse le faire sans un symbole sympathique.
J'utiliserais probablement des files d'attente mercuriales pour quelque chose comme ça. Gardez le référentiel principal en tant que version de développement et disposez d'un correctif code> pour la production de code> qui apporte les modifications nécessaires à la production. P>
Mercurial files d'attente extension mercurial.selenic.com/wiki/mqextension Tutoriel d'extension des files d'attente Mercurial mercurial.selenic.com/wiki/mqTutorial
Voici deux solutions possibles, on Mercurial et on ne Mercurial: p>
Je fais en fait cela en utilisant des branches nommées et une fusion droite au lieu de transplanter (qui est plus fiable, imo). Cela fonctionne généralement, bien que parfois (lorsque vous avez édité les différents fichiers de l'autre branche), vous devez faire attention à ne pas supprimer les différences lorsque vous fusionnez. P>
Cela fonctionne donc bien si vous ne modifiez pas beaucoup les différents fichiers. P>
J'ai résolu ce avec les paramètres locaux.
Append à settings.py:
Chaque Déployez je possède ses propres paramètres locaux (généralement différentes choses DB et différentes adresses e-mail d'origine) p> PS:. Seulement lire les « versions minified de la partie javascript » plus tard. Pour cela, je suggère un crochet post-mise à jour et un paramètre de configuration (comme JS_EXTENSION) p> Exemple (à partir du haut de ma tête non testé, adapter au besoin!). P> <script type="text/javascript" src="blabla{{JS_EXTENSION}}"></script> touche local_settings.py code> p> li>
^ local_settings.py $ code> à votre .hgignore code> li>
Ol>
settings.py code>; li>
local_settings.py fichier code> sur le serveur de production; li>
<script type="text/javascript" src="blabla.js"></script>
Cette méthode est jolie bien rangée. J'aime la partie js_extension, fait exactement ce que je voulais et donne un sens immédiatement.
Je vais peser avec une réponse ci-dessous, bien que l'excellente suggestion de Steve L. ait déjà été sélectionnée, mais je tiens à souligner que l'indépendante de la façon dont vous le faites enfin, la transplantation code> code> est un particulièrement mauvaise façon de le faire. La greffe effectue une exportation, puis une importation, qui donne à votre contact un nouvel identifiant de hash / noeud. Si chaque changements change de noms entre le développement et la production, vous demandez des problèmes de suivi de ce qui a été corrigé où et où un problème a été introduit. Rendre
HG entrant code> etHG sortant code> inutilisable entre Dev et Prod demande des problèmes.