У меня есть промежуточный сервер с установленными стандартными 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 export, так как она тоже потеряна - 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, а также (и в сочетании с другими подходами), но там тоже не повезло.
Итак, каков правильный способ сделать это? Это кажется такой простой задачей, что должен быть действительно простой способ ее выполнить, но у меня нет идей.Кто-нибудь?
Заранее спасибо!