2010-02-19 10 views
18

Próbuję zrobić "wdrożyć: zimny" dla mojej aplikacji. Repozytorium git jest lokalne dla mojego serwera wdrażania (tj. Mam tylko jeden serwer dla wszystkiego i I nie host mój kod na github).Capistrano + Git: lokalny repozytorium do serwera produkcyjnego

Oto zapis (zastąpiony moją nazwę aplikacji z "myapp" dla prywatności)

* executing `deploy:cold' 
    * executing `deploy:update' 
** transaction: start 
    * executing `deploy:update_code' 
    executing locally: "git ls-remote /home/mrichman/git/myapp.git master" 
fatal: '/home/mrichman/git/myapp.git' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
*** [deploy:update_code] rolling back 
    * executing "rm -rf /var/www/myapp.com/releases/20100218203108; true" 
    servers: ["myapp.com"] 
Password: 
    [myapp.com] executing command 
    command finished 
Command git ls-remote /home/mrichman/git/myapp.git master returned status code 32768 

Oto moja deploy.rb: http://pastie.org/831424

Próbowałem również

set :repository, "[email protected]:/home/mrichman/git/myapp.git" 

ale to daje mi

ssh: connect to host localhost port 22: Connection refused 

Wszelkie pomysły są mile widziane.

Odpowiedz

16

Wystąpił po prostu ten sam problem. Kluczem jest, aby nie używać kopii deploy_via, ale ustawić: local_repository

Powinien to być adres URL używany do uzyskania dostępu do repozytorium z komputera/laptopa programistycznego.

więc kopalnia ma

set :repository, "file:///srv/git/myapp.git" 
set :local_repository, "nameOfHostFromSSHConfig:/srv/git/myapp.git" 

Wydaje się, że pracował. Pamiętaj tylko, aby następnie usunąć linię kopiowania deploy_via.

+0

Mam teraz następujące dane, które również nie: zestawie: repozytorium, "file: ///var/git/myapp.git" zestaw: local_repository "localhost: /var/git/myapp.git" wykonywanie lokalnie: "git ls-remote localhost: /var/git/hireexchange.git master" ssh: połącz się z hostem localhost port 22: Połączenie odmówiono –

+1

Czy rozwijasz się w tym samym oknie? Jeśli jesteś, wyobrażam sobie: local_repository, "file: //var/git/myapp.git" będzie działać. localhost powinien zostać zastąpiony przez nazwę hosta, z którą łączysz się ze swojej zdalnej stacji roboczej. Również odkryłem, że jeśli masz submoduły, napotkasz więcej problemów podczas wdraania w taki sposób, ponieważ moduły są ustawione tak, aby wskazywały na zdalny adres URL. Bardzo denerwujące, ale można je rozwiązać za pomocą .ssh/config na serwerze pod użytkownikiem, który wdrożysz jako. – pmarsh

+1

Cześć chłopaki. Jeśli to robi różnicę, git na mojej lokalnej i zdalnej maszynie wymaga różnych ścieżek, dlatego potrzebowałem zestawu: git_local/path/to/remote/git i set: git/usr/bin/git (zauważ, że te nie wymagają ssh w początek). – btelles

1

Zaloguj się jako użytkownik serwisu są wdrażane do i spróbować tego, aby sprawdzić, czy użytkownik ma uprawnienia dostępu do tego katalogu:

ls -la /home/mrichman/git/myapp.git

Jeśli pojawi się błąd Odmowa uprawnień, musisz się upewnić, że ustawiono prawa dostępu do załączonych katalogów repozytorium, które umożliwiają skryptowi wdrażania uzyskanie dostępu do plików.

+0

I sprawdzeniu, że moja wdrożyć użytkownik ma pełny dostęp do /home/mrichman/git/myapp.git odczytu. Dziękuje za komentarz. –

+0

Spróbuj zalogować się do konta użytkownika wdrażania i wpisując ręcznie nieudane polecenie: "git ls-remote /home/mrichman/git/myapp.git master", prawdopodobnie spowoduje to ten sam błąd, a jeśli tak, zaloguj się jako użytkownik mrichman i spróbuj go jako tego użytkownika. Jeśli to nadal daje błąd, który zakład się stanie, będziesz chciał przejść do "/ home/mrichman/git/myapp.git "katalog i typ" status git ", a jeśli to się nie powiedzie, musisz sprawdzić, czy zawartość tego katalogu rzeczywiście zawiera repozytorium git: – rwl4

+0

Kiedy robię' git ls-remote' jako albo mój użytkownik wdrożenia, albo mój własny użytkownik wydaje mi się, że osiągam sukces: 'aa30ffc814fffd96b168ffec7224aeb9fe9df161 \t refs/heads/master'. Wierzę, że' status git' działa tylko na drzewach roboczych, a nie na rzeczywistym repozytorium W ramach eksperymentu wysłałem moje repo do Codaset, a moje 'cap deploy' działa dobrze w ten sposób.Mogę (i prawdopodobnie powinienem) kontynuować w ten sposób, ponieważ nie jest bezpiecznie zachować SCM na swoim serwerze WWW :) –

0

Upewnij się, że napisałeś prawidłowe repozytorium git z opiekuńczym rozróżnianie wielkości liter pisanie! (Stanąłem przed tym samym problemem, po prostu rozwiązany)

0

Mój problem był rzeczywiście związany z problemem znanych hostów. Jedyne, co musiałem zrobić, to upewnić się, że zdalny serwer git był na moich znanych hostach (spróbowanie SSH po raz pierwszy zachęci cię do dodania go samemu) i działało jak czar.

0

Jeśli ustawiono local_repository, to Capistrano używa wartości respository z serwera wdrażania i wartości local_respository z serwera programistycznego. Or something like that.

Moja konfiguracja pracował tak:

set :repository, "/home/#{user}/path/to/repo.git" 
set :local_repository, "myserver.com:path/to/repo.git" 
Powiązane problemy