2010-02-19 13 views
18

Sto provando a fare 'deploy: cold' per la mia app. Il repository git è locale a il mio server di distribuzione (ad esempio, ho solo un server per tutto e io non host il mio codice su github).Capistrano + Git: repository locale al server di produzione

Ecco la trascrizione (sostituito il mio nome app con "myapp" per la privacy)

* 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 

Ecco il mio deploy.rb: http://pastie.org/831424

Ho anche provato

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

ma questo mi dà

ssh: connect to host localhost port 22: Connection refused 

Tutte le idee sono apprezzate.

risposta

16

Appena incontrato lo stesso problema. La chiave è di non utilizzare la copia deploy_via, ma piuttosto impostare: local_repository

Questo dovrebbe essere impostato sull'URL che si utilizza per accedere al repository dal computer di sviluppo/laptop.

Quindi il mio ha

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

sembra aver funzionato. Ricorda solo di rimuovere anche la riga di copia deploy_via.

+0

Ora ho il seguente, che non riesce anche: set: repository, "file: ///var/git/myapp.git" set: local_repository, "localhost: /var/git/myapp.git" eseguendo localmente: "git ls-remote localhost: /var/git/hireexchange.git master" ssh: connettersi alla porta host localhost 22: Connessione rifiutata –

+1

Stai sviluppando sulla stessa casella? Se lo immaginereste: local_repository, "file: //var/git/myapp.git" funzionerebbe. localhost deve essere sostituito con qualsiasi sia il nome host a cui ci si connette dalla workstation remota presunta. Inoltre, ho scoperto che se disponi di sottomoduli ti imbatterai in più problemi eseguendo una distribuzione come questa, perché i moduli sono impostati per puntare a un URL remoto. Molto fastidioso, ma può essere risolto utilizzando .ssh/config sul server sotto l'utente che si distribuisce come. – pmarsh

+1

Ciao ragazzi. Se fa alcuna differenza, git sulla mia macchina locale e remota richiedeva percorsi diversi, quindi avevo bisogno di impostare: git_local/path/to/remote/git e set: git/usr/bin/git (nota che questi non richiedono l'ssh in l'inizio). – btelles

1

il login come utente del sito si sta distribuendo a e provare questo per vedere se l'utente ha il permesso di accedere a questa directory:

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

Se viene visualizzato un errore di autorizzazione negata, è necessario accertarsi di impostare le autorizzazioni sulle directory di chiusura del repository che consentono allo script di distribuzione di accedere ai file.

+0

Ho verificato che il mio utente Deploy ha accesso completo in lettura a /home/mrichman/git/myapp.git. Grazie per il commento. –

+0

Prova ad accedere all'account utente di deploy e digita manualmente il comando fallito: "git ls-remote /home/mrichman/git/myapp.git master", probabilmente ti darà lo stesso errore, e se lo fa, accedi come utente mrichman e provalo come quell'utente. Se ciò genera ancora un errore, che scommetto avverrà, allora vorrai andare in "/ home/mrichman/git/myapp.git "directory e digita" git status "e se ciò fallisce, è necessario verificare che il contenuto di tale directory contenga effettivamente un repository git. – rwl4

+0

Quando eseguo' git ls-remote' come mio utente di distribuzione o mio mi sembra di avere successo: 'aa30ffc814fffd96b168ffec7224aeb9fe9df161 \t refs/heads/master'. Credo che' git status' funzioni solo sugli alberi di lavoro, e non sul repository attuale. Come esperimento, ho spinto il mio repo su Codaset, e il mio 'cap deploy' funziona bene in questo modo.Posso (e probabilmente dovrei) continuare in questo modo, perché è pericoloso mantenere il proprio SCM sul proprio server web :) –

0

Assicurarsi di aver scritto il repository git corretto con la cura dello con distinzione tra maiuscole e minuscole scrittura! (Ho affrontato lo stesso problema, ha appena risolto)

0

Il mio problema era in realtà correlato a un problema degli host noti. Tutto quello che dovevo fare era assicurarsi che il server git remoto fosse nei miei host conosciuti (provare ad inserire SSH per la prima volta ti chiederà di aggiungerlo tu stesso), e ha funzionato come un incantesimo.

0

Se è impostato local_repository, Capistrano utilizza il valore di respository dal server di distribuzione e il valore di local_respository dal server di sviluppo. Or something like that.

La mia configurazione ha funzionato in questo modo:

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