Cuestionario 12 Factor App Flashcards
¿Cuántos códigos base y deploys hay por app?
Únicamente hay un código base por app, pero si hay muchos deploys por app.
¿Para que utilizamos un manejador de versiones? (es decir en 1.0.1)
Utilizamos un manejador de versiones para entender y saber mapear un nombre canónico (tag o commit) a un estado puntual del código base en los diferentes ambientes (ej : local, test, producción)
¿Sólo mi aplicación está corriendo en mi ambiente local? ¿Y los servidores que uso para producción?
Los servidores raramente están dedicados a ejecutar únicamente una aplicación, tiene funciones, aplicaciones propias del sistema y de terceros.
Entonces el correcto funcionamiento de mi aplicación no puede depender nunca de que mi sistema tenga o no tenga dicha librería, si la tiene corro el riesgo de que otra aplicación también la utilice.
Por esto no hay que depender de paquetes instalados en el sistema, siempre tengo que declarar un manifiesto de las dependencias y ejecutar mi aplicación aisladamente. Mi entorno productivo y mi entorno local tienen que aplicar las mismas dependencias.
Hay que declarar y aislar.
¿Qué es un Bundle?
Se utilizan para generar entornos virtuales para que se apliquen las librerías declaradas.
Ejemplo : bundle exec rake
¿Cuáles son las 3 etapas para correr un código?
Build / Construcción : transformar el código en un paquete ejecutable llamado build. Aquí es donde se descargan todas las dependencias y se compilan los binarios
Release / Distribución : combinamos el paquete recién construido junto a la configuración generando una distribución llamada release
Herramienta Capistrano → brinda un modo de gestionar las distribuciones y son útiles para retroceder a una versión anterior
Run / Ejecución : donde se toma el release y se ejecuta en un entorno específico.
¿Los procesos son desechables?
Los procesos deben ser desechables, no puedo depender de que una ejecución termine bien para que mi sistema sea estable
¿Para que sirven los 12 factores que nos propone el manifiesto?
Para que nuestras aplicaciones tengan una arquitectura e infraestructura de calidad y que sean robustas