Aclarando el uso de variables de ambiente (.env) en un proyecto Laravel

Es común ver el uso incorrecto de las variables de ambiente en algunos proyectos Laravel. La mayoría de los proyectos documentan correctamente el uso de sus Variables de Ambiente, Laravel no es la excepción.

Aclarando el uso de variables de ambiente (.env) en un proyecto Laravel

Si aún no sabes la causa del porque tus variables guardadas en tu archivo .env retornan como null luego de ejecutar php artisan config:cache, no te preocupes, ahora te explicaré el por qué.

La Razón

Primero definamos el concepto 'Variable de Ambiente'. Llamamos variables de ambiente a aquellas variables que son guardadas en el archivo .env de tu proyecto. La idea central de este tipo de variables es el permitir simplificar la tarea de configuración del proyecto en diversos entornos, donde entorno es el servidor o servicio donde se coloca u hospeda el proyecto.

Es común ver el uso incorrecto de las variables de ambiente en algunos proyectos Laravel. Esto a mi entender se debe a que en otros lenguajes populares como Node.js o Javascript, utilizan estos archivos para hospedar esta información de manera directa. La diferencia radica en que muchas veces, los proyectos y/o lenguajes que disponen del uso de estas variables de forma directa, usualmente compilan el proyecto antes de ser puestos en producción, lo que reemplaza estos valores en los archivos fuentes antes de ser públicos. Lo importante de esto es comprender lo que sucede en cada framework o lenguaje utilizado. La mayoría de los proyectos documentan correctamente el uso de sus Variables de Ambiente, Laravel no es la excepción.

Dado a la comodidad que existe en el poder escribir y acceder a una variable de este tipo casi de forma 'global', es muy común el que los programadores utilicen los mismos para almacenar datos sensibles que requieren ser utilizados o actualizados de forma rápida.

El problema es que este uso 'informal' no es el uso 'correcto'. En Laravel, el uso de las variables de entorno tienen el propósito exclusivo de alimentar archivos de configuración. Aunque es posible utilizar estas variables en tu código a través de la función env(), es importante entender que este no es el uso correcto de las mismas y es la razón por la cual pueden generarse errores al momento de colocar nuestro proyecto en producción.

Puesta en Producción

Para entender el problema es importante comprender lo que sucede al momento de publicar un proyecto en producción. Entre las buenas prácticas de Laravel se encuentra el crear un caché de las configuraciones y archivos de uso frecuente en el sistema. Esta tarea es posible gracias a los comandos artisan: config:cache y optimize que tienen el propósito de preparar el sistema para ser optimo en su servicio.

En Laravel, el propósito principal del comando config:cache es mover los valores de las Variables de Entorno a sus variables finales en los archivos de configuración y establecer las Variables de Ambiente existentes a null.

Por esta razón, luego de ejecutado este comando, cualquier documento fuera de la carpeta config que intente acceder a estas variables a través de la función env(), recibirá null como respuesta.

Solución Recomendada

Si requieres o deseas configurar variables protegidas a utilizar dentro de tu aplicación, es recomendable crear un archivo de configuración que acceda al o los valores de ambiente requeridos en su aplicación y acceder a estos valores a través de la función config().

Recursos: