У меня есть промежуточный сервер с установленными стандартными Ruby и Ruby Enterprise. Поскольку стандарт Ruby отказывается устанавливать критический камень, мне нужно установить $PATH так, чтобы ruby /gem/rake/etc. всегда ссылайтесь на версии REE. И поскольку я использую Capistrano для развертывания на наших машинах, мне нужно сделать это в Capistrano.
Как установить переменную среды один раз и сохранить ее на протяжении всей сессии Capistrano?
1) Это легко сделать в файлах bashrc, но Capistrano не читает файлы bashrc.
2) Я использовал бы
Capistrano <default_environment['PATH'] = 'Whatever'
но Capistrano использует эти переменные среды, например
env PATH=Whatever command arg ...
и они теряются всякий раз, когда другая оболочка создается в исполняемом файле, переданном env. Например, когда вы используете sudo. Что очень важно:
[[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) И я не могу использовать команду экспорта bash, поскольку они тоже потеряны. Кажется, что Capistrano запускает новую оболочку для каждой команды (или что-то в этом роде), и это тоже потеряно:
cap> export MYVAR=12
[establishing connection(s) to xxx.xxx.xxx.xxx]
cap> echo $MYVAR
** [out :: xxx.xxx.xxx.xxx]
cap>
4) Я также попытался испортить опции Capistrano: shell и: pty (и в сочетании с другими подходами), но также не повезло.
Итак - какой правильный способ сделать это? Это похоже на такую базовую задачу, что должен быть действительно простой способ ее достижения, но у меня нет идей. Кто-нибудь?
Спасибо заранее!