¿Cómo implementar con Composer y Git sin time de inactividad?

Para nuestro proyecto estamos usando Git para versionar nuestro código y Composer para manejar las dependencies. Eso funciona bastante bien, pero para actualizar o agregar una dependencia, no he encontrado un buen flujo de trabajo.

Supongamos que queremos agregar una característica que necesita alguna nueva dependencia. Implementaremos y probaremos en una twig de características. En esta twig, actualizaríamos el file composer.json. Después de finalizar la function, la fusionamos utilizando una request de extracción y la implementamos con git pull en el server. El nosotros realizaríamos la composer install del composer install para instalar las nuevas dependencies en el server. El problema con este flujo de trabajo: durante el time entre la actualización de Git y Composer, el sistema podría haberse roto debido a la falta de dependencies.

¿Cómo resolvería esto en un flujo de trabajo sin time de inactividad y sin un modo de mantenimiento?

Si desea hacerlo manualmente, una solución es implementarla en una carpeta versionada en el server y luego vincular esa carpeta a la carpeta de producción real una vez que la composer install haya finalizado. De esta forma, básicamente no hay time de inactividad para su sitio. Por ejemplo, la estructura de su carpeta puede verse así:

 ./ ../ app/ /current --> app/versions/01 /versions /01 

y señala la raíz del documento para ese website a la app/current . Entonces, el process de implementación podría ser algo como esto (debe cambiar las routes para que coincida con su situación):

 $ cp -r app/versions/01 app/versions/02 # make a new version $ cd app/versions/02 $ git pull # update the new version $ composer install # update new version dependencies $ ln -sfn app/versions/02 app/current # make new version live 

Tenga en count que el server web debe configurarse para seguir enlaces simbólicos. Después, la estructura de su carpeta se verá así:

 ./ ../ app/ /current --> app/versions/02 /versions /01 /02 

Como un extra a este método: si algo está mal con la nueva versión, solo puede apuntar el enlace simbólico a la versión original mientras soluciona el problema.

Si desea automatizar este process, también hay herramientas de implementación que manejarán este tipo de cosas para usted, como Capistrano y Mina .

Parece que podría estar buscando integrar continuous integration o automation de compilation en su flujo de trabajo.

Primero, asegúrese de revisar las secciones de PHP en cada una de ellas: The Right Way: http://www.phptherightway.com/#building_and_deploying_your_application .

Es posible que también desee investigar: