2010-02-19 7 views
18

Ich versuche, "deploy: kalt" für meine App zu tun. Der Git Repo ist lokal zu mein Deployment-Server (d. H. Ich habe nur einen Server für alles und ich hosten nicht meinen Code auf Github).Capistrano + Git: Repository lokal für Produktionsserver

Hier das Transkript ist (ersetzt meinen App-Name mit "myapp" für die Privatsphäre)

* 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 

Hier ist meine deploy.rb: http://pastie.org/831424

Ich habe auch versucht

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

aber das gibt mir

ssh: connect to host localhost port 22: Connection refused 

Irgendwelche Ideen werden geschätzt.

Antwort

16

Gerade lief das gleiche Problem. Der Schlüssel ist, nicht deploy_via copy zu verwenden, sondern set: local_repository

Dies sollte auf die URL festgelegt werden, die Sie verwenden, um von Ihrem Entwicklungscomputer/Laptop auf das Repository zuzugreifen.

So hat mein

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

scheint funktioniert zu haben. Denken Sie daran, die Kopierlinie deploy_via ebenfalls zu entfernen.

+0

Ich habe jetzt die folgenden, die auch fehlschlägt: Satz: Repository, "file: ///var/git/myapp.git" Satz: local_repository "localhost: /var/git/myapp.git" lokal ausführen: "git ls-remote localhost: /var/git/hireexchange.git master" ssh: Verbindung zum Host herstellen localhost Port 22: Verbindung verweigert –

+1

Entwickeln Sie auf derselben Box? Wenn Sie sind, würde ich mir vorstellen: local_repository, "file: //var/git/myapp.git" würde funktionieren. localhost sollte durch den Hostnamen ersetzt werden, mit dem Sie sich von Ihrer angenommenen fernen Workstation aus verbinden. Auch ich habe festgestellt, dass wenn Sie Submodule haben Sie mehr Probleme bei der Durchführung einer Bereitstellung wie folgt, weil die Module auf eine Remote-URL verweisen. Sehr ärgerlich, aber kann mit .ssh/config auf Ihrem Server unter dem Benutzer, den Sie bereitstellen, als gelöst werden. – pmarsh

+1

Hallo Leute. Wenn es einen Unterschied macht, benötigt Git auf meinem lokalen und Remote-Rechner unterschiedliche Pfade, daher benötigte ich set: git_local/pfad/zu/remote/git und set: git/usr/bin/git (beachten sie, dass sie nicht den ssh benötigen der Anfang). – btelles

1

Melden Sie sich als Benutzer der Website, die Sie bereitstellen werden und versuchen, dies zu sehen, ob Ihre Benutzer die Berechtigung dieses Verzeichnis zuzugreifen:

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

Wenn Sie den Fehler "Berechtigung verweigert" erhalten, müssen Sie sicherstellen, dass Sie Berechtigungen für die umschließenden Verzeichnisse des Repository festlegen, die dem Bereitstellungsskript den Zugriff auf die Dateien ermöglichen.

+0

ich überprüft haben, dass mein deploy Benutzer vollen Lesezugriff auf /home/mrichman/git/myapp.git hat. Danke für den Kommentar. –

+0

Versuchen Sie, sich beim Deploy-Benutzerkonto anzumelden und den fehlgeschlagenen Befehl manuell einzugeben: "git ls-remote /home/mrichman/git/myapp.git master", es wird Ihnen wahrscheinlich den gleichen Fehler geben, und wenn dies der Fall ist, melden Sie sich an als der Mrichman-Benutzer und versuchen Sie es als dieser Benutzer. Wenn das immer noch einen Fehler gibt, auf den ich wette, dann wirst du in die "/ home/mrichman/git/myapp" gehen wollen.git "verzeichnis und gib" git status "ein und wenn das fehlschlägt, musst du überprüfen, ob der Inhalt dieses Verzeichnisses tatsächlich ein git-Repository enthält. – rwl4

+0

Wenn ich' git ls-remote' als meinen deploy user oder meinen eigenen benutze Benutzer ich scheinen Erfolg zu bekommen: 'aa30ffc814fff96b168effec7224aeb9fe9df161 \t refs/heads/master' Ich glaube' git status' funktioniert nur auf Arbeitsbäumen, und nicht das eigentliche Repository Als ein Experiment schob ich meine Repo zu Codaset, und meine "cap deploy" funktioniert auf diese Art und Weise. Ich kann (und sollte wahrscheinlich) so weitermachen, da es unsicher ist, seinen SCM auf seinem Webserver zu behalten :) –

0

Stellen Sie sicher, dass Sie das richtige Git Repo mit fürsorglicher geschrieben haben, die schreibend ist! (Ich sah das gleiche Problem, es gerade gelöst)

0

Mein Problem wurde tatsächlich mit einem bekannt-Hosts-Problem verbunden. Alles, was ich tun musste, war sicherzustellen, dass der Remote-Git-Server in meinen bekannten Hosts war (der Versuch, sie zum ersten Mal in SSH einzubringen, wird Sie auffordern, das selbst hinzuzufügen), und es funktionierte wie ein Zauber.

0

Wenn local_repository festgelegt ist, verwendet Capistrano den Wert respository vom Bereitstellungsserver und den Wert local_respository vom Entwicklungsserver. Or something like that.

Meine Konfiguration arbeitete wie so:

set :repository, "/home/#{user}/path/to/repo.git" 
set :local_repository, "myserver.com:path/to/repo.git" 
Verwandte Themen