2012-08-05 13 views
8

Ho intenzione di memorizzare alcune impostazioni dell'applicazione in variabili di ambiente, come MYSQL_URL = mysql: // ... Uso supervisord per gestire il processo di applicazione. Come caricare le variabili di ambiente prima dell'avvio del sottoprocesso? Soprattutto quando si modificano queste impostazioni, spero che un riavvio del sottoprocesso caricherà le nuove impostazioni.Caricare la variabile di ambiente prima di eseguire

Inoltre mi chiedo dove memorizzare queste variabili di ambiente. Un file che posso "esportare $ (nome file gatto)"? O alcuni modi migliori. Sono curioso di sapere come Heroku gestisce le sue variabili ambientali.

risposta

19

È possibile impostare per-processo variabili d'ambiente nella configurazione supervisord nella sezione [program:x], questi saranno passati al processo quando si inizia:

[program:yourprocess] 
# ... other settings 
environment = 
    MYSQL_URL=mysql://, 
    OTHER_VAR="some other value" 

Si noti che è necessario utilizzare una virgola tra ogni variabile. Ho usato newline anche nell'esempio sopra, quelli sono opzionali. Se si dispone di spazi nei valori dell'ambiente, è necessario racchiudere il valore tra virgolette.

È anche possibile impostare le variabili di ambiente per tutti i processi nella sezione [supervisord], utilizzando lo stesso formato.

Ultimo ma non meno importante, qualsiasi variabile di ambiente impostata all'avvio di supervisord viene passata ai processi gestiti da supervisord. Vedi lo documentation section on environment variables per i dettagli.

Da notare che se si cambia le variabili di ambiente configurate nel file di configurazione, è necessario segnalare al supervisord per ricaricare la configurazione e riavviare i sottoprocessi per loro di raccogliere questi cambiamenti:

supervisorctl update 
supervisorctl restart yourprocess 

Se tuttavia si modificano le variabili di ambiente al di fuori di supervisord, è necessario spegnere supervisord tutti insieme per prenderli:

supervisorctl shutdown 
supervisord 
+3

sconfigge lo scopo, se anche di memorizzare il file di configurazione supervisore controllo di versione – Dustin

+1

@Dustin è r ight. C'è un modo per aggirare questo? Forse una specie di file include? – surjikal

+0

@surjikal: genera il file di configurazione con uno strumento come buildout. –

0

Secondo the docs il "supervisord.conf contiene una sezione denominata [supervisord in cui le impostazioni globali" possono essere impostati come il environmont variabili. (Nella pagina collegata, cerca la parola "ambiente").

Le variabili di ambiente possono anche essere set an a per-program basis.