Капистрано: Могу ли я установить переменную среды для всего сеанса ограничения доступа?

У меня есть промежуточный сервер с установленными стандартными 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 (и в сочетании с другими подходами), но и здесь не повезло.

Итак - как правильно это сделать? Это кажется такой простой задачей, что должен быть действительно простой способ ее выполнить, но у меня нет идей.Кто-нибудь?

Заранее спасибо!

34
задан Xavier Holt 29 September 2011 в 19:41
поделиться