6

我的共享主机没有提供 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。

4

7 回答 7

14

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

只是 using:set :scm_command, "~/bin/git"
仍然给了我错误,因为我的本地 git 不在那个地方。

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

于 2008-11-11T19:20:12.580 回答
8

问题是你已经设置

default_run_options[:pty] = true

这意味着您的 .bash_profile 或您通常的 shell 初始化文件将不会运行,当您将其设置为 false 时情况并非如此——但是当它想要询问您密码时您会遇到问题。

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

default_environment['PATH'] = "/your/path/to/git:/and/any/other/path/you/need"
于 2010-01-03T04:24:16.237 回答
3

您应该能够像这样指定 git 的完整路径:

set :scm_command, "/home/your_cap_runner_user/bin/git"

我自己没有尝试过 - 在 Capistrano 本身的 git.rb 源代码的文档中找到它。

于 2008-11-11T15:01:47.950 回答
3
stdin: is not a tty

这可能是因为您的共享主机上安装了 CPanel。它在包含在您的 ~/.bashrc 文件中的全局 /etc/.bashrc 文件中执行“mesg y”。所以你可以注释掉包含。

这是来源:http ://webhostingneeds.com/Git_stdin_is_not_a_tty

于 2010-01-28T22:41:05.220 回答
2

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

set :deploy_via, :copy

这将导致检出发生在您自己的机器上,然后被复制到部署服务器。

于 2008-11-11T01:18:29.843 回答
1

这是一个很大的帮助,因为我遇到了与原始海报相同的问题。

“之前”的症状:

  • 运行 cap deploy:setup (成功)
  • 运行 cap deploy:check(失败,'git command not found')

我现在将 set :scm_command, "~/bin/git" 添加到我的 deploy.rb 文件中。

  • 运行 cap deploy:setup (成功)
  • 跑帽部署:检查(成功)
  • 运行 cap deploy:cold (失败,出现以下错误)

    :97:in ``': 没有这样的文件或目录 - ~/bin/git info git@github.com:quintar/eu reka.git -rHEAD (Errno::ENOENT)

所以看起来“git”被识别了,但是我在 deploy.rb 中包含的存储库被绕过了?

于 2008-12-29T22:30:52.130 回答
0

~/.ssh/environment 文件不是由 shell 执行的。这是一个硬编码的环境文件。如果您想以这种方式设置路径,则需要对其进行硬编码,而不是附加到 $PATH。其他答案可能更正确,但如果一切都失败了,正确设置 ~/.ssh/environment 是一个可靠的后备。

于 2012-11-01T07:38:07.033 回答