У меня есть промежуточный сервер с установленными стандартными 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. Что очень важно:
[holt@Michaela trunk]$ env VAR=hello ruby -e "puts ENV['VAR']"
hello
[holt@Michaela 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 (и в сочетании с другими подходами), но и здесь не повезло.
Итак - как правильно это сделать? Это кажется такой простой задачей, что должен быть действительно простой способ ее выполнить, но у меня нет идей.Кто-нибудь?
Заранее спасибо!