[Consejos de Laravel] Cómo cambiar temporalmente una variable de entorno laravel sin actualizar el archivo .env

Imagine el siguiente escenario: está trabajando en una aplicación laravel que envía algunos trabajos a una cola. Observa en su archivo de registro que un trabajo específico arroja una excepción, pero no puede depurarlo directamente (con dd() por ejemplo), ya que un trabajador de otro lugar consume el trabajo.

Una forma de solucionar este problema sería cambiar la variable de entorno QUEUE_DRIVER en su archivo .env para sync , depurar y luego revertir el cambio después de que termine.

O imagina que tienes una base de datos de prueba y necesitas ejecutar primero las migraciones, y necesitarías actualizar el archivo .env para usar la base de datos de prueba primero, ejecutar las migraciones y luego revertir el cambio.

Como puede ver, en ambos casos, todo lo que tenemos que hacer es actualizar temporalmente la variable de entorno. Y, por lo general, lleva un tiempo actualizar el archivo .env (es posible que incluso necesite borrar la configuración o reiniciar algunos trabajadores).

Afortunadamente, es posible pasar una variable de entorno a los comandos de Linux, y estas variables solo se usarán para la ejecución actual.

En el ejemplo anterior, todo lo que tenemos que hacer es ejecutar el comando de la siguiente manera:

QUEUE_DRIVER=sync php artisan my-artisan-command-here

Puedes probarlo tú mismo con Tinker.

Incluso puede pasar múltiples variables de entorno como esta:

QUEUE_DRIVER=sync DB_DATABASE=testing php artisan my-artisan-command-here

Como puede ver, este no es un truco específico de laravel, y puede usarlo siempre que se encuentre en una situación en la que necesite cambiar temporalmente una variable de entorno.

Espero que encuentres esto útil.