2012-05-11 16 views
6

Estamos ejecutando servidores de ubuntu con Nginx + Phusion Passenger para nuestras aplicaciones de rieles 3.0x.¿El pasajero de Fusion no ve las variables de entorno?

que tienen una variable de entorno situado en/etc/environment sobre las máquinas de prueba:

MC_TEST=true 

Si me quedo una consola (carriles paquete exec c) y salida ENV [ "MC_TEST"] veo 'verdadero '. Pero si pongo el mismo código en una página (<% = ENV ["MC_TEST"]%>) no ve nada. Esa variable no existe.

que me lleva a la pregunta:

1 - ¿Cuál es la forma correcta para obtener las variables de entorno en pasajeros con Nginx (no apache SetEnv)?

2 - ¿Por qué el pasajero no tiene un entorno adecuado?

Respuesta

7

Passenger fusion v4 + permite la lectura de variables de entorno directamente desde el archivo bashrc. Asegúrese de que bashrc vive en la carpeta de inicio del usuario con la que se ejecuta el proceso de pasajeros (en mi caso, era ubuntu, para Linux EC2 y nginx)

Aquí es el documentation que entra en detalles de bashrc

+0

Esa sección de documentación explica * todo * lo que necesita sobre las variables de entorno. Qué son, cómo funcionan, sus propiedades y cómo pasarlas a las aplicaciones de Phusion Passenger. – Hongli

+0

Solo una nota, pero esto funciona por defecto incluso en shells no interactivos. – digicazter

4

Tengo el mismo problema con usted cuando uso pasajero con guion de inicio nginx y nginx en ubuntu. La razón es que uso el servicio sudo nginx restart (instalado por el guión init) para iniciar nginx y
que se estaba ejecutando por root y el raíz no obtuvo su variable de entorno de usuario de inicio de sesión. Hay dos soluciones para esto. Uno está ejecutando nginx manualmente.

sudo service nginx stop 
sudo -E /path/to/your/nginx 

uno es añadir env a su nginx script de inicio

export MC_TEST=true 

Esta última solución es de alguna manera fea, pero funciona. Y creo que la mejor forma es encontrar una configuración para decirle a la secuencia de comandos de inicio que preserve el usuario de inicio de sesión.

+0

Ejecutar nginx manualmente hizo el truco para mí. ¡Gracias! – Myxtic

0

Tengo otra solución fea.

env_file = '/etc/environment' 
if File.exist?(env_file) 
    text = File.open(env_file).read 
    text.each_line do |line| 
    key, val = line.split('=', 2) 
    ENV[key] = val.strip 
    end 
end 
Cuestiones relacionadas