2012-12-04 6 views
12

Ho un ambiente di sviluppo locale che fa molto affidamento sulle variabili di ambiente del sistema (segue il modello di app di 12 fattori Heroku) e attualmente le ho impostate utilizzando uno script di shell. Lo script della shell imposta anche i telecomandi git e attiva l'ambiente virtualenv, e mi piacerebbe, se possibile, spostare tutto questo su un comando Fabric (o una serie di comandi), dato che stiamo usando Fabric per un sacco di altre cose e mi piacerebbe ritirare gli script della shell.Come impostare le variabili di ambiente utilizzando Fabric

accorrono local('export FOO=bar') non funziona:

$ fab set_default_env_vars 
Using fabfile '/home/hugo/Projects/test/fabfile.py' 
[localhost] local: export FOO=bar 

Done. 

$ echo $FOO 

$ 

Questo è possibile - e se sì, come?

risposta

19

È possibile utilizzare fabric.context_managers.shell_env-export una variabile per colpire per la vostra shell e tutti sottoshell generato da esso - ma quelle variabili non persistono oltre il guscio che sono stati definiti (quindi non è possibile impostare le variabili ambientali per la shell genitore da uno script fabric come nel tuo esempio).

È possibile impostare uno script bash che si fonte per il proprio ambiente locale che è identical to what you would add to ~/.profile in your production slug (nelle sue chiavi, non necessariamente i suoi valori) e utilizzare fabric.context_managers.prefix alla fonte quel file prima di eseguire i comandi locali.