【发布时间】:2011-11-27 23:43:23
【问题描述】:
我有一个安装了标准 Ruby 和 Ruby Enterprise 的登台服务器。由于标准 Ruby 拒绝安装关键 gem,我需要设置 $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 的可执行文件中启动另一个 shell 时,它们就会丢失。就像你使用 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 似乎为每个命令(或类似的命令)启动了一个新的 shell,这也丢失了:
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 选项(并与其他方法结合使用),但也没有运气。
那么 - 这样做的正确方法是什么? 这似乎是一项基本任务,应该有一个非常简单的方法来完成它,但我没有想法。有人吗?
提前致谢!
【问题讨论】:
标签: environment-variables capistrano