2008-11-11 14 views
6

Mój udostępniony host nie podał git, więc zbudowałem go i zainstalowałem w ~/bin. Po uruchomieniu tego programu wystąpił następujący błąd w większości poleceń, mimo że zakończyły się pomyślnie.Używanie capistrano, gdy zdalny git znajduje się na niestandardowej ścieżce

stdin: is not a tty

mogę rozwiązać ten problem przez dodanie:

default_run_options[:pty] = true

do mojego deploy.rb, ale potem ten błąd, który blokuje wdrażania :

sh: git: command not found

Jak mogę rozwiązać oba błędy?

Próbowałem dodać plik ~/.ssh/environment z "PATH=$PATH:$HOME/bin" (i zmianę sshd_config, aby go użyć), ale nic nie zrobił.

Wygląda na to, że jakakolwiek powłoka jest używana, Capistrano nie używa ~/.bashrc lub ~/.bash_profile na serwerze zdalnym.

Jakieś pomysły, jak ustawić ścieżkę na zdalnym komputerze?

inne informacje: używam OS X lokalnie, a udostępnionym serwerem jest Linux na Site5.

+0

Proszę zaznaczyć, która odpowiedź rozwiązała ten problem. – cfx

Odpowiedz

2

Szybkim rozwiązaniem jest ustawienie następujących w pliku deploy.rb:

set :deploy_via, :copy 

To spowoduje, że kasa występuje na własnym komputerze, a następnie zostać skopiowane do serwera wdrażania.

3

powinien być w stanie podać pełną ścieżkę do git tak:

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

nie próbowałem to się dla siebie - znaleziono je w dokumentacji w kodzie źródłowym git.rb w samym Capistrano.

+0

, która działa tak długo, jak zarówno lokalne, jak i zdalne komendy git znajdują się na tej samej ścieżce. –

14

Dzięki, Chu - położyłeś mnie na właściwej ścieżce.

po prostu używając: set :scm_command, "~/bin/git"
nadal mi dawał błędy, ponieważ mój lokalny git nie jest w tym miejscu.

Jednak dodaje wydaje się działać i rozwiązywać swoje problemy:
set :scm_command, "~/bin/git"
set :local_scm_command, "/usr/local/bin/git"

1

Jest to bardzo pomocne, jak biegałam w tym samym numerze co oryginalny plakat.

"przed" objawy:

  • czapka run Deploy: setup (sukces)
  • prowadził cap deploy: sprawdzić (nie z 'polecenia git nie znaleziono')

teraz dodano zestaw: scm_command, "~/bin/git" do mojego pliku deploy.rb.

  • prowadził cap deploy: setup (udane)
  • prowadził cap deploy: check (udane)
  • prowadził czapka wdrożyć: zimna (nie powiedzie się, z powodu następującego błędu)

    : 97: w `` ': Nie ma takiego pliku lub katalogu - ~/bin/info git [email protected]: quintar/eu reka.git -rHEAD (errno :: ENOENT)

Tak wygląda' git ' ja s rozpoznane, ale repozytorium, które zawarłem w moim deploy.rb jest pomijane?

8

Problemem jest to, że masz ustawione

default_run_options[:pty] = true 

co oznacza, że ​​nie będzie uruchomić plik .bash_profile lub startowych zwykle powłoka, która nie jest w przypadku, gdy zostanie ustawiona na false - ale wtedy będziesz mieć problemy, gdy chcesz poprosić cię o hasło.

Aby obejść ten problem, można ręcznie ustawić zmienną środowiskową PATH w pliku deploy:

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

Twoja domyślna sugestia środowiskowa właśnie doprowadziła mnie do ogromnego bólu głowy w grze Rails Rumble 2010. Dzięki! – Jared

3
stdin: is not a tty 

Jest to prawdopodobnie ze względu na CPanel zainstalowany na udostępnionym hosta. Wykonuje "mesg y" w globalnym pliku /etc/.bashrc, który znajduje się w twoim pliku ~/.bashrc. Możesz więc tylko skomentować włączenie.

Oto źródło: http://webhostingneeds.com/Git_stdin_is_not_a_tty

0

Plik ~/.ssh/środowisko nie jest wykonywane przez powłokę. Jest to zakodowany plik środowiska. Jeśli chcesz ustawić ścieżkę w ten sposób, będziesz musiał ją zakodować na stałe zamiast dołączać do zmiennej $ PATH. Pozostałe odpowiedzi są prawdopodobnie bardziej poprawne, ale prawidłowe ustawienie ~/.ssh/environment jest niezawodnym rozwiązaniem awaryjnym, jeśli wszystko inne zawiedzie.