Tengo un servidor intermedio con Ruby y Ruby Enterprise instalados. Como estándar Ruby se rehúsa a instalar una gema crítica, necesito establecer $ PATH para que ruby / gem/rake/etc. siempre refiérase a las versiones REE. Y como utilizo Capistrano para implementar en nuestras máquinas, tengo que hacerlo en Capistrano.Capistrano: ¿Puedo establecer una variable de entorno para toda la sesión de tope?
¿Cómo puedo establecer una variable de entorno una vez y hacer que persista durante toda la sesión de Capistrano?
1) Es fácil de hacer en archivos bashrc, pero Capistrano no lee archivos bashrc.
2) que haría uso de Capistrano
default_environment['PATH'] = 'Whatever'
pero Capistrano utiliza estas variables de entorno como
env PATH=Whatever command arg ...
y se Pierden cada vez que otro proyectil se hace girar dentro del ejecutable pasado a env. Como cuando usas sudo. Lo cual es algo 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) Y no se puede utilizar el comando de exportación fiesta, ya que estos se pierden también - Capistrano parece poner en marcha un nuevo shell para cada comando (o algo así), y eso se pierde, también:
cap> export MYVAR=12
[establishing connection(s) to xxx.xxx.xxx.xxx]
cap> echo $MYVAR
** [out :: xxx.xxx.xxx.xxx]
cap>
4) he tratado de jugar con Capistrano: shell y opciones: pty también (y en combinación con los otros enfoques), pero no hay suerte, tampoco.
Entonces, ¿cuál es la forma correcta de hacerlo? Esto parece una tarea tan básica que debería haber una forma realmente simple de lograrlo, pero me he quedado sin ideas. ¿Nadie?
¡Gracias de antemano!
Buena llamada: no sabía que sudo oscurecía el entorno local. Parece que simplemente agregar la opción -E corrige la mayoría de los casos, pero $ PATH es especial ([referencia] (http://stackoverflow.com/questions/257616/sudo-changes-path-why)). Voy a jugar con esto un poco más y me pondré en contacto contigo. ¡Aclamaciones! –