2012-06-04 19 views
5

Estoy ejecutando una aplicación de supervisión y tengo que configurar un entorno para ella. Hay alrededor de 30 variables de entorno que deben establecerse. He intentado poner todo en un gran ambientevariables de entorno de supervisión configurando la aplicación

=

línea y que no parece funcionar. También probé múltiples entornos = líneas, y eso tampoco parece funcionar. También probé con y sin 'alrededor del valor env.

¿Cuál es la mejor manera de configurar mi entorno de manera que permanezca intacto bajo el control de supervisión? ¿Debo llamar a mi programa real (tornado, fwiw) desde un script de shell con el entorno precargado allí? Idealmente, me gustaría poner todas las variables del entorno en un archivo de inclusión y cargarlas con el supervisor, pero estoy dispuesto a hacerlo de otra manera.

ACTUALIZACIÓN:

Aquí es lo que estoy usando en el archivo de configuración:

environment= 
    PYTHONPATH=/srv/obsf/current/:$PYTHONPATH, 
    PYTHON_EGG_CACHE=/srv/obfs/current/.python-eggs, 
    OBFS_API_ENVIRONMENT_STAGE=test, 

esto continúa durante alrededor de 30 líneas, con una gran cantidad de variables de entorno. Cuando ejecuto el programa, se bloquea inmediatamente quejándose de que la variable de entorno OBFS_API_ENVRIONMENT_STAGE no está configurada.

+0

Última lo usé, el formato 'environment = KEY = val, KEY2 = val2' funcionó. ¿Puedes pegar la línea que probaste? – Bittrance

Respuesta

4

Como resultado, la coma final es un problema. Cité todas las cadenas env y eliminé la coma final. Todo funciona ahora

+0

¡Felicidades por la solución! Cuando pueda, asegúrese de marcar su respuesta como 'aceptada' para que otros puedan aprender de su éxito. Saludos ~ –

+0

Citando las variables ENV que estaba tratando de agregar funcionó para mí. Gracias. – shawn

+0

De hecho, una coma final resultará en que el siguiente línea sea interpretado como una configuración de entorno. – WhyNotHugo

8

El relevant documentation section explica que es necesario enumerar las variables como pares clave/valor separados por comas:

ambiente

una lista de pares clave/valor en la forma CLAVE = val, TECLA2 = val2 que se colocará en el entorno del proceso de supervisión (y como resultado en todos sus entornos de proceso hijo). Esta opción puede incluir el valor% (here) s, que se expande al directorio en el que se encontró el archivo de configuración de supervisión. Tenga en cuenta que los subprocesos heredarán las variables de entorno del shell utilizado para iniciar la supervisión, excepto las que se redefinen aquí y dentro de la estrofa de configuración del entorno del programa.

El example for this section también utiliza comas:

environment = KEY1=value1,KEY2=value2 

Internamente esto es parsed into a dict usando la pitón shlex lexer, por lo que me encargo de citar correctamente. También va Elimina espacios en blanco, por lo que para hacer las cosas más fácil de leer, que podrían dividir las cosas en varias líneas:

environment = 
    KEY1="Some longer value containing whitespace", 
    KEY2=value2-on-a-new-line, 

Tenga en cuenta que una coma final es opcional; no hará una diferencia en la salida.

Falta una coma después de TECLA1 sin embargo podría conducir a valores extraños (el ejemplo anterior, menos el coma después whitespace" le daría {'KEY1': 'Some longer value containing whitespace', '=': ','} como el dict medio ambiente) como el signo de igualdad requisito no está rigurosamente comprobado. Tengo submitted a pull request para remediar eso.

+0

> Tenga en cuenta que una coma final es opcional; no hará una diferencia en la salida. WhyNotHugo

+0

@Hugo: ¿esa próxima línea está sangrada? La siguiente línea * no se pasa al código que maneja el valor *. Volveré a echar un vistazo a esto mañana, pero por la forma en que funciona el analizador de configuración (biblioteca estándar de Python), lo que describes es imposible. –

+0

@Hugo: mirando de nuevo el código, no debería haber forma de que la coma final pueda ingresar en la siguiente línea desde la configuración. ¿Puede mostrarme una configuración de muestra (use un Gist o Pastie) que demuestre ese comportamiento? –

Cuestiones relacionadas