Использование capistrano, когда удаленный git находится на нестандартном пути - PullRequest
6 голосов
/ 11 ноября 2008

Мой общий хост не предоставил 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, не использует ~ / .bashrc или ~ / .bash_profile на удаленном сервере.

Есть идеи, как установить путь на удаленном компьютере?

другая информация: я использую OS X локально, а общим сервером является Linux на Site5.

Ответы [ 7 ]

14 голосов
/ 11 ноября 2008

Спасибо, Чу - ты поставил меня на правильный путь.

только с использованием: set :scm_command, "~/bin/git"
все еще дал мне ошибки, так как мой местный мерзавец не в этом месте.

Однако, похоже, что сработало и решило мои проблемы:
set :scm_command, "~/bin/git"<br> set :local_scm_command, "/usr/local/bin/git"

8 голосов
/ 03 января 2010

Проблема в том, что вы установили

default_run_options[:pty] = true

, что означает, что ваш .bash_profile или ваш обычный файл инициализации оболочки не будут запущены, что не относится к случаю, когда вы устанавливаете его в false - но тогда у вас будут проблемы, когда он захочет попросить вас ввести пароль .

Чтобы обойти эту проблему, вы можете вручную установить переменную среды PATH в своем файле развертывания:

default_environment['PATH'] = "/your/path/to/git:/and/any/other/path/you/need"
3 голосов
/ 29 января 2010
stdin: is not a tty

Вероятно, это связано с тем, что CPanel установлена ​​на вашем общем хосте. Он выполняет "mesg y" в глобальном файле /etc/.bashrc, который включен в ваш ~ / .bashrc. Так что вы можете просто закомментировать включение.

Вот источник: http://webhostingneeds.com/Git_stdin_is_not_a_tty

3 голосов
/ 11 ноября 2008

Вы должны быть в состоянии указать полный путь к git следующим образом:

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

Я не пробовал это для себя - нашел это в документации в исходном коде для git.rb в самом Capistrano.

2 голосов
/ 11 ноября 2008

Быстрый обходной путь - установить в файле deploy.rb следующее:

set :deploy_via, :copy

Это приведет к тому, что извлечение произойдет на вашем компьютере, а затем будет скопировано на сервер развертывания.

1 голос
/ 30 декабря 2008

Это большая помощь, так как я столкнулся с той же проблемой, что и оригинальный постер.

Симптомы "До":

  • run cap deploy: настройка (успешная)
  • run cap deploy: check (не удается, с командой git not found)

Теперь я добавил set: scm_command, "~ / bin / git" в мой файл deploy.rb.

  • run cap deploy: настройка (успешная)
  • run cap deploy: проверка (успешно)
  • run cap deploy: cold (ошибка, со следующей ошибкой)

    : 97: в `` ': такого файла или каталога нет - ~ / bin / git info git@github.com: quintar / eu reka.git -rHEAD (Errno :: ENOENT)

Похоже, что 'git' распознан, но хранилище, которое я включил в мой deploy.rb, обойдено?

0 голосов
/ 01 ноября 2012

Файл ~ / .ssh / environment не выполняется оболочкой. Это жестко закодированный файл среды. Если вы хотите установить путь таким образом, вам нужно жестко его закодировать, а не добавлять в $ PATH. Другие ответы, возможно, более правильные, но правильная установка ~ / .ssh / environment является надежным отступлением, если все остальное не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...