Variables de entorno en el script ruby ​​en Linux

Tengo un script Ruby simple en uno de mis servidores que hace algunas cosas (no relevante para la pregunta). A veces se ejecuta directamente desde la línea de comandos, a veces desde un script de bash ejecutado por un trabajo cron y, a veces, como resultado de una acción fail2ban.

El script usa una variable de entorno (digamos FOO=bar ) y yo uso la gem dotenv para cargarla colocando FOO=bar en un archivo .env en mi proyecto.

Sin embargo, en ciertos casos, la variable de entorno no se carga y el script falla, especialmente cuando el script es ejecutado por un proceso automatizado o bash en lugar de ejecutarlo directamente.

Por ejemplo, digamos que la secuencia de comandos solo contiene lo siguiente (y el archivo .env existe y se rellena):

 #!/usr/bin/env ruby require 'dotenv' Dotenv.load puts ENV['FOO'] 

Y corro /path/to/myscript.rb . Da salida a ‘bar’.

Sin embargo, si /path/to/myscript.rb la línea /path/to/myscript.rb en un archivo test.sh y ejecuto ./test.sh no hay salida, lo que significa que no se está cargando .env. Si precedo la llamada ruby ​​con export FOO="bar" , funcionará como se espera.

¿Cómo puedo asegurarme de que mis variables .env se carguen según sea necesario?

El archivo .env se carga desde la raíz de su proyecto. Específicamente en su caso del directorio actual. Intente moverse al directorio que contiene el archivo .env antes de ejecutar el script.

 cd /path/to/ && ./myscript.rb 

Actualizar:

Puedes cargar el archivo .env desde la ruta del script sin moverte allí:

 config = File.absolute_path(File.join(File.expand_path(__FILE__), '..', '.env')) Dotenv.load(config)