部署 在使用 capstriano 的时候怎么取远程服务器的环境

lb563 · 2012年04月13日 · 最后由 leomao10 回复于 2013年03月13日 · 3848 次阅读

在用 capstrinao 部署项目时有很多的设置. 像在使用设置:"set :default_environment" 用这个方法时就需要我给一个明确的服务器环境使用"PATH"值等 这样可以让我后续的命令能够得到执行的环境 现在我的做法是: 1: 到服务器上去取得这个 env 的种种设置例如:PATH,LANG,GME_PATH etc 2: 然后写死到这个设置中例如:

set :default_environment, { 'PATH' => "/usr/local/Cellar/ruby/1.9.2-p290/bin:/usr/local/bin:/bin:/usr/bin:", 'GEM_PATH' => '/usr/local/Cellar/ruby/1.9.2-p290/lib/ruby/gems/1.9.1', 'LANG' => 'en_US.UTF-8'}

这样设置能达到我的要求

但是我想问一个问题,能不能动态的来获得这些 env 这样我就不用硬性的指定服务器环境而让我的脚本自动的去查找,在我 cap deploy 的时候!

用 bash 写在 bashrc 里,用 zsh 写在 zshenv,Ubuntu 的话 bashrc 记得要在那行 return 之前设置

#1 楼 @doitian 我的意思是说怎么从这些文件中取到并给"set :default_environment"赋值。

#2 楼 @lb563 cap 不会读进来吗?我服务器上 ruby 安装的 rbenv 就是在 zshenv 里初始化,cap 通过 ssh 执行命令会 load zshenv

用 bash -l -c’COMMAND‘来执行命令,就可以带上环境变量了

#3 楼 @doitian 如果 我不加上""set :default_environment"的话会出现"sh: git: command not found"的情况

设置 PATH 本身就应该是登录时运行 .bashrc 这里应该做的事情,和 capstriano 无关

#6 楼 @vkill 在我部署的时候,需要执行 git 等命令。而这个 git 是在我要部署的机器上,所以我要告诉 cap 在哪里去找 git.所以我要告诉一个 PATH 变量!

#7 楼 @lb563 你可以写一个.git.bashrc,然后在 cap 里面写run "source .git.bashrc && git pull xxx"

#7 楼 @lb563 run "bash -l -c 'git' "

@lb563 后来这个问题解决了么?我今天也碰到这个问题,发现我写在/etc/profile 或者 ~/.bashrc 下面的 export PATH 都不能在 cap 下面用

@leomao10 也没有解决掉。只能写死到里面去.没有找到好的方法

@lb563 ,OK,我再 Google 下看看有什么好的办法,多谢啦

@lb563 , 我发现我的问题是我把 export 放在了这段代码后面:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

而 Cap 是用非 interactive 模式来执行命令的,因此 export 代码没有被运行😓

需要 登录 后方可回复, 如果你还没有账号请 注册新账号