【问题标题】:Using capistrano when remote git is on a non-standard path当远程 git 在非标准路径上时使用 capistrano
【发布时间】:2010-09-21 17:41:43
【问题描述】:

我的共享主机没有提供 git,所以我将它构建并安装到 ~/bin 中。 当我运行它时,大多数命令都出现以下错误,尽管它们是成功的。

stdin: is not a tty

我可以通过添加来解决这个问题:

default_run_options[:pty] = true

到我的 deploy.rb,但随后我收到此错误,这会阻止部署:

sh: git: command not found

如何解决这两个错误?

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

capistrano 使用的任何 shell 似乎都没有使用远程服务器上的 ~/.bashrc 或 ~/.bash_profile。

知道如何在远程机器上设置路径吗?

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

【问题讨论】:

  • 请注明哪个答案解决了这个问题。

标签: ruby-on-rails shell path capistrano deployment


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    stdin: is not a tty
    

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

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

    【讨论】:

      【解决方案3】:

      问题是你已经设置了

      default_run_options[:pty] = true
      

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

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

      default_environment['PATH'] = "/your/path/to/git:/and/any/other/path/you/need"
      

      【讨论】:

      • 您的 default_environment 建议让我摆脱了 Rails Rumble 2010 的巨大头痛。谢谢!
      【解决方案4】:

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

      “之前”症状:

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

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

      • 运行 cap deploy:setup(成功)
      • 运行 cap deploy:check(成功)
      • 运行 cap deploy:cold(失败,出现以下错误)

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

          • 只要本地和远程 git 命令在同一路径中就可以工作
          【解决方案7】:

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

          set :deploy_via, :copy
          

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

          【讨论】:

            猜你喜欢
            • 2012-09-11
            • 1970-01-01
            • 2011-04-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-26
            • 2015-05-14
            • 1970-01-01
            相关资源
            最近更新 更多