把命令放到capistrano执行的正确位置是什么?

时间:2016-02-04 17:52:14

标签: shell capistrano

我想让capistrano使用chruby,但我一直收到错误bundle stderr: /bin/sh: 1: chruby: not found

我需要运行source /usr/local/share/chruby/chruby.sh,以便shell可以找到命令chruby。

我已经完成this,并了解交互/非交互式shell,登录/非登录shell。从逻辑上讲,我不想使用pty: true,所以我尝试使用$BASH_ENV,但仍然是同样的错误。而且,我意识到没有人这样做。

1 个答案:

答案 0 :(得分:0)

我在Ubuntu 14.04上使用rbenv,但我想你的设置可能类似。我的解决方案是将rbenv shell初始化逻辑放在我的部署用户.bashrc的最顶端,如下所示:

if [ -d $HOME/.rbenv ]; then
  export PATH="$HOME/.rbenv/bin:$PATH"
  eval "$(rbenv init -)"
fi

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# ... snip

需要注意的重要一点是,即使对于非交互式shell ,rbenv代码也会执行,因为它是在交互式检查之前放置的。

所以你可以做同样的事情,把chruby脚本放在顶部:

source /usr/local/share/chruby/chruby.sh

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

我没有使用过chruby,所以带上一粒盐。