A menudo veo la siguiente línea en Dockerfiles
ENV BUNDLE_FROZEN=trueRevisé los documentos del paquete y dice "No permitir cambios en el Gemfile". Pero estoy confundido por qué alguien querría prohibir que las personas cambien Gemfile. Después de todo, podemos agregar nuevas gemas a medida que evoluciona un proyecto. ¿Alguien podría explicar por qué necesitamos este env var, cómo y cuándo lo usamos y por qué aparece a menudo en Dockerfiles?
Esta variable de entorno cambia el comportamiento de bundler si detecta una diferencia entre el Gemfile y el Gemfile.lock que lo acompaña.
De forma predeterminada, cuando se ejecuta la bundle install , el paquete intentará actualizar Gemfile.lock si se agregaron gemas o se cambiaron las restricciones. En las implementaciones de producción, esto a menudo no es deseable, ya que puede causar que se instalen versiones inesperadas de gemas que no se probaron por completo.
Al configurar BUNDLE_FROZEN=true , el paquete (1) requerirá un Gemfile.lock existente y (2) se negará a actualizar este Gemfile.lock con información actualizada. Esto garantiza que su implementación de producción solo use las versiones de gemas exactas bloqueadas en su Gemfile.lock comprometido.
El flujo de trabajo aquí es que cada vez que agrega gemas a su Gemfile , también debe ejecutar la bundle install en su caja local para actualizar Gemfile.lock . Luego, puede probar los cambios y confirmar el Gemfile.lock actualizado. Cuando luego implementa su aplicación, ambos archivos están sincronizados. Con BUNDLE_FROZEN=true , puede estar seguro de utilizar el entorno exacto en producción que ha especificado y probado durante el desarrollo.
Al final, esto es básicamente una prueba de fallas para obligarlo a usted (y a sus colegas) a actualizar activamente Gemfile.lock después de cambiar Gemfile o cualquier dependencia. Si siempre hace esto (y está seguro de eso), no necesita configurar BUNDLE_FROZEN en producción. Sin embargo, si lo configura, el paquete fallará en voz alta si lo olvidó, en lugar de instalar silenciosamente versiones de gemas que es posible que no haya probado por completo.