Ho un server di gestione temporanea con Ruby e Ruby Enterprise installati. Come standard Ruby si rifiuta di installare una gemma critica, ho bisogno di impostare $ PATH in modo che ruby / gem/rake/etc. fare sempre riferimento alle versioni REE. E poiché utilizzo Capistrano per distribuirlo alle nostre macchine, ho bisogno di farlo a Capistrano.Capistrano: Posso impostare una variabile di ambiente per l'intera sessione cap?
Come è possibile impostare una variabile di ambiente una volta e mantenerla per tutta la sessione Capistrano?
1) È facile da eseguire nei file bashrc, ma Capistrano non legge i file bashrc.
2) userei di Capistrano
default_environment['PATH'] = 'Whatever'
ma Capistrano utilizza queste variabili d'ambiente come
env PATH=Whatever command arg ...
e che stanno perse ogni volta che una nuova shell è filata all'interno dell'eseguibile passato a Env. Come quando usi sudo. Che è un pò importante:
[[email protected] trunk]$ env VAR=hello ruby -e "puts ENV['VAR']"
hello
[[email protected] trunk]$ env VAR=hello sudo ruby -e "puts ENV['VAR']"
nil
3) E non posso usare il comando bash di esportazione, in quanto questi si perdono troppo - Capistrano sembra avviare una nuova shell per ogni comando (o qualcosa di simile), e che è perduto, anche:
cap> export MYVAR=12
[establishing connection(s) to xxx.xxx.xxx.xxx]
cap> echo $MYVAR
** [out :: xxx.xxx.xxx.xxx]
cap>
4) ho provato scherzi con Capistrano di: shell e: opzioni PTY pure (e in combinazione con altri approcci), ma senza fortuna nemmeno lì.
Quindi, qual è il modo giusto per farlo? Questo sembra un compito così basilare che dovrebbe esserci un modo davvero semplice per realizzarlo, ma sono fuori dalle idee. Chiunque?
Grazie in anticipo!
Buona chiamata: non ero a conoscenza del fatto che sudo oscurasse l'ambiente locale. Sembra che l'aggiunta dell'opzione -E corregge la maggior parte dei casi, ma $ PATH è speciale ([riferimento] (http://stackoverflow.com/questions/257616/sudo-changes-path-why)). Ci giocherò un po 'di più e tornerò da te. Saluti! –