Pregunta

¿Cuál es una buena estrategia de implementación para usar con Git + Heroku (Ruby on Rails)?

Actualmente, la forma en que trabajo con mi repositorio Git de origen:Todas las funciones (o 'historias') primero se verifican como ramas, luego se fusionan con la principal y se envían al origen.

Cualquier cosa enviada al origen/maestro activa una secuencia de comandos que lleva el nuevo código de Rails al área de preparación (servidor web de Rails simple).

Cuando llegue el momento de enviar una nueva versión de producción a Heroku, ¿debería crear una nueva rama (llamada algo así como production_version_121) y enviarla de alguna manera a Heroku?

Idealmente, me gustaría elegir qué características de versiones de desarrollo anteriores debo incluir en la rama de producción...pruébalo y envíalo a Heroku.

Por ejemplo, es posible que no desee que todo el código más reciente pase a producción.Es posible que desee que la característica "a" en la que había trabajado y la característica "c" se fusionen en producción de alguna manera, sin incluir la característica experimental "b", que necesita más depuración.

NÓTESE BIEN.Voy a intentar evitar capistrano al principio y hacer que algo funcione manualmente por ahora.

¿Pensamientos?¿Mejores prácticas?

¿Fue útil?

Solución

En el proyecto Gemcutter simplemente tenemos un producción rama.Cualquier cambio que queramos ver en el sitio de producción se fusiona en esa rama y luego se implementa con:

git push heroku production:master

El staging La sucursal tiene un propósito similar para el sitio de preparación (también en Heroku)

Otros consejos

Desde que leí de Vincent Driessen Un exitoso modelo de ramificación Git , he estado enganchado. toda mi compañía (8 de nosotros) ahora se han estandarizado con este modelo y algunos otros lugares que he consultado con también han empezado a utilizar también.

La mayoría de todos los que he demostrado que dice que estaban haciendo algo similar ya y me pareció muy fácil de adaptar.

En pocas palabras, usted tiene 2 ramas que son permanentes (maestro y desarrollan). La mayoría de las veces usted acaba de ser lo que se ramifica de desarrollar y fusionarlos de nuevo en desarrollarse. Las cosas se ponen un poco más compleja cuando llegue a hacer comunicados de producción y revisiones, pero después de leer el post un par de veces, se convierte en arraigado.

Hay incluso una herramienta de línea de comandos denominada rel="nofollow noreferrer"> git-flow para ayudarle a salir.

Hay una variedad de maneras de hacer esto, y lo que realmente depende de su preferencia.

Te daré una estrategia posible de la parte superior de mi cabeza: Teniendo en cuenta que ya tiene una configuración de montaje automatizado que utiliza maestro, sugeriría la creación de una rama de la 'producción'. Cuando se desea promover una solución / función de la producción, que acaba de fusionar la rama tema en su rama 'producción'.

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

Cuando esté listo para realmente empuje que el código en el servidor de producción, debe etiqueta la rama usando un nombre único (probablemente con una marca de tiempo). A continuación, sólo tiene que pulsar la rama de producción a Heroku.

git checkout production
git tag release-200910201249

Me gustaría sugerir la creación de un script o git alias para automatizar el etiquetado de las marcas de tiempo, ya que el uso de un esquema de nomenclatura coherente es importante. Utilizo algo como esto:

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

Esto me permite hacer sólo tiene que escribir git dtag cuando quiero etiquetar un comunicado con una marca de tiempo.

Se puede ver usando etiquetas git tag y verlos con git show release-1234. Para obtener más información sobre las etiquetas, git help tag ejecutar. También puede encontrar esta Github guiar en el etiquetado útil. También me gustaría recomendar la lectura de los flujos de trabajo de otras personas (en este caso es una buena valoración crítica ) y escoger y elegir lo que funciona para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top