Question

Quelle est une bonne stratégie de déploiement à utiliser avec Git + Heroku (Ruby on Rails)?

Actuellement, la façon dont je travaille avec mon origine dépôt Git: Toutes les fonctions (ou « histoires ») sont tout d'abord vérifié que les branches, puis se fondre avec le maître et poussé à l'origine

.

Tout poussé à l'origine / maître déclenche un script qui tire le nouveau code des rails dans la zone de mise en scène (webserver rails simples).

Quand le moment sera venu pour moi de pousser une nouvelle version de production Heroku, dois-je créer une nouvelle branche (appelée quelque chose comme production_version_121) et pousser en quelque sorte à ce Heroku?

Idéalement, je voudrais choisir qui propose des versions de développement antérieures, je devrais inclure dans la branche de production ... tester et pousser à Heroku.

Par exemple, je ne voulez pas tout le dernier code pour obtenir poussé à la production. Je veux peut-être fonction « a » que j'avais travaillé et fonction « c » à la fois fusionné dans la production d'une certaine manière, sans inclure fonctionnalité expérimentale « b » qui a besoin de plus de débogage.

N.B.. Je vais essayer d'éviter Capistrano d'abord et obtenir quelque chose de travail manuel pour l'instant.

Pensées? Les meilleures pratiques?

Était-ce utile?

La solution

Dans le projet Gemcutter nous avons simplement production branche. Tout changement que nous voulons voir sur le site de production se fondre dans cette branche, puis déployés avec:

git push heroku production:master

La branche staging sert un but similaire pour le site de mise en scène (également sur Heroku)

Autres conseils

Depuis que je lis Vincent Driessen de Un modèle réussi de branchement Git , je suis accroché. Mon entreprise entière (8 d'entre nous) ont maintenant normalisé sur ce modèle et quelques autres endroits où j'ai consulté ont aussi commencé à l'utiliser ainsi.

Presque tout le monde je l'ai montré à dit qu'ils faisaient quelque chose de similaire déjà et l'a trouvé très facile à adapter.

En un mot, vous avez 2 branches qui sont permanentes (maîtrise et le développement). La plupart du temps, vous aurez juste faire bifurque de développer et de les fusionner de nouveau dans se développer. Les choses deviennent un peu plus complexe lorsque vous entrez dans les rejets et faire les correctifs production, mais après avoir lu le message deux ou trois fois, il devient engrained.

Il y a même un outil de ligne de commande appelée git-flow pour vous aider.

Il existe une variété de façons d'aller à ce sujet, et cela dépend vraiment de votre préférence.

Je vais vous donner une stratégie possible du haut de ma tête: Étant donné que vous avez déjà une configuration de mise en scène automatique qui utilise maître, je suggère la création d'une branche « production ». Lorsque vous souhaitez promouvoir une solution / fonction à la production, vous simplement fusionner la branche de sujet dans votre branche « production ».

git checkout production
git pull . my-topic-branch
(resolve any conflicts)

Lorsque vous êtes prêt à réellement pousser ce code à votre serveur de production, vous devez balise la branche en utilisant un nom unique (probablement avec un horodatage). Ensuite, vous appuyez simplement sur la branche de production à Heroku.

git checkout production
git tag release-200910201249

Je vous suggère de créer un alias de script ou git pour automatiser le marquage des horodateurs, depuis l'aide d'un schéma de nommage cohérent est important. J'utilise quelque chose comme ceci:

git config alias.dtag '!git tag release-`date "+%Y%m%d%H%M"`'

Cela me permet de faire simplement taper git dtag quand je veux marquer une version avec un horodatage.

Vous pouvez vous afficher les étiquettes en utilisant git tag et afficher à l'aide git show release-1234. Pour plus d'informations sur les étiquettes, exécutez git help tag. Vous pouvez également trouver ce Github sur le marquage guider utile. Je vous recommande également la lecture des workflows d'autres personnes (ici est une belle writeup) et choisir ce qui fonctionne pour vous.

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