Consejos de implementación en varias etapas

¿Cuáles son algunas de las mejores prácticas y la teoría general de la implementación en varias etapas para aplicaciones web?

Estoy particularmente interesado en implementar aplicaciones de Rails usando Git, Capistrano y Passenger, y he encontrado publicaciones que analizan los aspectos prácticos del process:

  • Capistrano: Multietapa
  • Presentamos AutoTagger

¿Qué consideraciones debo tomar con respecto a cada etapa (testing, puesta en escena, producción)? ¿Deben implementarse las etapas en diferentes serveres físicos? ¿Alguna sugerencia o consejo sobre la implementación en varias etapas? ¿Algún inconveniente que debería tener en count?

mejor,

Jacob

Siempre acabo de crear tareas de límite para cada destino de deployment y las utilicé en la línea de command:

# deploy.rb task :stage do server 10.0.0.1 ... end > cap stage deploy 

También puede definir tareas personalizadas dentro de cada tarea objective, como una implementación que realiza la limpieza en etapas, pero que no está en producción.

Dado que estas tareas de implementación rara vez son muy grandes, realmente nunca vi el objective de instalar extensiones de tapa para etapas múltiples, pero supongo que las situaciones de los demás pueden ser diferentes.

Creo que la producción debe estar separada de sus otros entornos, de lo contrario existe el peligro de que los processs de mal funcionamiento en etapas o similares puedan afectar el performance de la producción.

A veces, defino las tareas de límite para mayor comodidad en la puesta en escena, como voladura de la database y recargándola desde el volcado de producción más reciente. Estas tareas deben verificar su destino de implementación a través de una variable establecida o similar y se niegan a postularse para la producción como un seguro contra un error tipográfico a altas horas de la noche.

Es tentador poner un montón de comportamiento personalizado en su deploy.rb, pero he descubierto que esto tiende a afectar y requiere mucho esfuerzo de mantenimiento a medida que cambia su entorno o el cambio de la API.

Otra práctica que he visto en entornos más grandes es tener una count shell con un checkout que rastrea la twig estable específicamente configurada para actuar como el punto de control de Capistrano. Usted ingresa y ejecuta commands de tapa allí en lugar de localmente. Esto puede ayudar a evitar problemas en los que deploy.rb tiene implementadas modificaciones que no está listo para implementar con la producción. Este es un problema menor con git vs svn, pero aún así uno debe tener cuidado de pensar cuál es su deploy.rb local en el momento en que ejecuta los commands de límite.

Heroku realmente está haciendo estas cosas fáciles en estos días, y EY y otros no están exactamente muy atrás.

Es mejor tener dos entornos de server diferentes: puesta en escena y producción. Siempre ignoro el entorno de testing. El entorno de testing actúa como producción, pero revierte la database cuando termina. La ejecución de ambos en el mismo server puede afectar negativamente el performance y la estabilidad del entorno de producción. La actualización de una gem para probar en el entorno de etapas puede afectar negativamente la producción y le puede costar el time de inactividad.

Debe estar muy atento a que las mismas versiones de gems estén en ambos serveres. Puede causar problemas si una versión de una aplicación funciona en etapas pero no está en producción debido a este tipo de discrepancia.

Siempre tendría una window de console abierta que está list para revertir la última implementación en caso de que algo salga mal. Realmente no hay mucho más en el process que eso.

Ahórrese algo de dinero y compre el server de puesta a escena más económico que pueda. Eres el único que lo usará, ¿verdad? Solo asegúrate de que sean del mismo proveedor.

Hemos estado utilizando la implementación multipasa de capistrano con mucho éxito durante más de un año. El sistema separa muy bien los files de implementación para cada etapa de una manera casi idéntica a los files de entorno de Rails. Fue muy fácil de configurar y administrar.