当远程git在非标准路径上时使用capistrano

6 deployment shell capistrano ruby-on-rails path

我的共享主机没有提供git,所以我构建并安装到〜/ bin中.当我运行它时,我在大多数命令上遇到以下错误,尽管它们是成功的.

stdin: is not a tty

我可以通过添加以下内容解决该问题

default_run_options[:pty] = true

到我的deploy.rb,但后来我得到了这个阻止部署的错误:

sh: git: command not found

我该如何解决这两个错误?

我尝试添加〜/ .ssh/environment文件"PATH=$PATH:$HOME/bin"(并更改sshd_config以使用它),但它什么也没做.

似乎capistrano使用的shell不使用远程服务器上的〜/ .bashrc或〜/ .bash_profile.

任何想法如何在远程机器上设置路径?

其他信息:我在本地使用OS X,共享服务器是Site5上的linux.

Mat*_*orn 14

谢谢,楚 - 你让我走上了正确的道路.

只是使用:set :scm_command, "~/bin/git"
仍然给了我错误,因为我当地的git不在那个地方.

但是,以下似乎有效,并解决了我的问题:
set :scm_command, "~/bin/git"
set :local_scm_command, "/usr/local/bin/git"


cki*_*kim 8

问题是你已经设定好了

default_run_options[:pty] = true
Run Code Online (Sandbox Code Playgroud)

这意味着您的.bash_profile或您通常的shell init文件将不会运行,但是当您将其设置为false时则不是这样 - 但是当您想要询问密码时会遇到问题.

要解决此问题,您可以在部署文件中手动设置PATH环境变量:

default_environment['PATH'] = "/your/path/to/git:/and/any/other/path/you/need"
Run Code Online (Sandbox Code Playgroud)


Den*_*ssy 2

一个快速的解决方法是在deploy.rb 文件中设置以下内容:

set :deploy_via, :copy
Run Code Online (Sandbox Code Playgroud)

这将导致在您自己的计算机上进行签出,然后将其复制到部署服务器。