2012-06-04 14 views
5

Sto eseguendo un'applicazione da supervisord e devo creare un ambiente per esso. Ci sono circa 30 variabili d'ambiente che devono essere impostate. Ho provato a mettere tutto su un unico grande ambientevariabili di ambiente supervisord impostazione dell'applicazione

=

linea e che non sembra funzionare. Ho anche provato più enviroment = lines, e non sembra funzionare neanche. Ho anche provato sia con che senza 'intorno al valore di env.

Qual è il modo migliore per configurare l'ambiente in modo che rimanga intatto sotto il controllo Supervisore? Dovrei chiamare il mio programma attuale (tornado, fww) da uno script di shell con l'ambiente precaricato lì? Idealmente, mi piacerebbe inserire tutte le variabili ambientali in un file di inclusione e caricarle con supervisore, ma sono disposto a farlo in un altro modo.

UPDATE:

Ecco quello che sto utilizzando nel file di configurazione:

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

Questo va avanti per circa 30 linee, con un sacco di variabili d'ambiente. Quando eseguo il programma, si blocca immediatamente lamentando che la variabile di ambiente OBFS_API_ENVRIONMENT_STAGE non è impostata.

+0

Ultimo utilizzo, il formato 'environment = KEY = val, KEY2 = val2' ha funzionato. Puoi incollare la linea che hai provato? – Bittrance

risposta

4

Come risulta, la virgola finale è un problema. Ho citato tutte le stringhe env e rimosso la virgola finale. Tutto funziona ora.

+0

Congratulazioni per la correzione! Quando sei in grado, assicurati di contrassegnare la tua risposta come "accettata" in modo che altri possano imparare dal tuo successo. Cheers ~ –

+0

Citando le variabili ENV che stavo cercando di aggiungere ha funzionato per me. Grazie. – shawn

+0

In effetti, una virgola finale comporterà che la riga successiva venga interpretata come impostazione dell'ambiente. – WhyNotHugo

8

Il relevant documentation section spiega che è necessario elencare le variabili come separati da virgola coppie chiave/valore:

ambiente

un elenco di coppie chiave/valore nella forma chiave = val, chiave2 = val2 che verrà inserito nell'ambiente dell'ambiente del processo di supervisione (e come risultato in tutti i suoi ambienti di processo figlio). Questa opzione può includere il valore% (qui) s, che si espande nella directory in cui è stato trovato il file di configurazione di supervisord. Si noti che i sottoprocessi erediteranno le variabili di ambiente della shell utilizzata per avviare supervisor ad eccezione di quelle sovrascritte qui e all'interno della stanza di configurazione dell'ambiente del programma.

Il example for this section inoltre usa le virgole:

environment = KEY1=value1,KEY2=value2 

Internamente questo è parsed into a dict usando il pitone shlex lexer, quindi penseremo citando correttamente. Sarà anche Rimuove gli spazi, in modo da rendere le cose più leggibile, si potrebbe dividere le cose su più righe:

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

Nota che una virgola finale è facoltativo; non farà la differenza nell'output.

Manca una virgola dopo TASTO1 però potrebbe portare a valori strani (nell'esempio precedente, meno la virgola dopo whitespace" darebbe {'KEY1': 'Some longer value containing whitespace', '=': ','} come il dict ambiente) come il segno di uguale requisito non è rigorosamente controllato. Ho submitted a pull request per rimediare a questo.

+0

> Si noti che una virgola finale è facoltativa; non farà la differenza nell'output. WhyNotHugo

+0

@Hugo: la riga successiva è rientrata? La riga successiva è * non passata al codice che gestisce il valore *. Domani darò un'occhiata a questo, ma il modo in cui funziona il parser di configurazione (libreria standard Python), quello che descrivi è impossibile. –

+0

@Hugo: esaminando nuovamente il codice, non ci dovrebbe essere modo che la virgola finale possa tirare una riga successiva dalla configurazione. Puoi per favore mostrarmi una configurazione di esempio (usa un Gist o un Pastie) che dimostri questo comportamento? –

Problemi correlati