Capistrano error tar: questo non sembra un archivio tar


102
 INFO [050fe961] Running mkdir -p /home/rails/rails-
capistrano/releases/20140114234157 on staging-rails
DEBUG [050fe961] Command: cd /home/rails/rails-capistrano/repo && ( PATH=/opt/ruby/bin:$PATH GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/rails/git-ssh.sh mkdir -p /home/rails/rails-capistrano/releases/20140114234157 )
 INFO [050fe961] Finished in 0.142 seconds with exit status 0 (successful).
 INFO [2dea2fe5] Running git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157 on staging-rails
DEBUG [2dea2fe5] Command: cd /home/rails/rails-capistrano/repo && ( PATH=/opt/ruby/bin:$PATH GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/rails/git-ssh.sh git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157 )
DEBUG [2dea2fe5]    fatal: Not a valid object name
DEBUG [2dea2fe5]    tar: This does not look like a tar archive
DEBUG [2dea2fe5]    tar: 
DEBUG [2dea2fe5]    Exiting with failure status due to previous errors      

Sono confuso su due cose:

  1. Perché Capistrano corre git archivequi:
    git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157

  2. Perché sta tarfallendo?

Risposte:


321

Ho avuto lo stesso problema, finché non mi sono reso conto che stavo estraendo il ramo inesistente da git.


53
Un tale schiaffo sulla fronte.
Grant Birchmeier

20
Sono anche il muto
notaceo il

12
La seconda volta che incontro la tua risposta, la seconda volta è successo, mi sento stupido!
Fabian de Pabian

11
Sono contento che questa domanda abbia così tanti voti positivi. Almeno non fallisco da solo.
triturazione

6
Seriamente, questa è probabilmente la 42a volta che faccio la stessa ricerca su Google e leggo questa risposta xD
Cyril Duchon-Doris

19

Anche l'eliminazione di app_name / repo ha risolto questo problema per me.


1
Questo ha funzionato per me alcune volte ogni volta che ci sono problemi di repo con cap deploy, ma non sempre.
Jorge Orpinel

15

Ciò accade quando il repository nel server da distribuire è incasinato. Stiamo parlando del semplice repository git che Capistrano inserirà di default /var/www/$application/repo(per riferimento di altre persone).

Nel tuo caso non ha una caratteristica locale / ramo Capistrano quindi durante l'esecuzione git archive feature/Capistranonon viene restituito nulla a quel |pipe. Per confermare, ssh nel server, cd in / home / rails / rails-capistrano / repo ed esegui git branch.

  1. Sta eseguendo l' archivio git come un modo per esportare l'albero del ramo selezionato. git archive "lo scrive sullo standard output" così Capistrano lo reindirizza a tar per decomprimere immediatamente l'archivio nella directory del nuovo rilascio. (Perché Capistrano ha scelto questo invece di git checkout mi sconfigge.)

  2. tar fallisce perché non riceve nulla d:

Posso pensare a due possibili soluzioni / modi per risolvere i problemi:

  • ssh nel server ed elimina manualmente la cartella repo (ad esempio nel tuo caso / home / rails / rails-capistrano / repo) come menzionato da @lugolabs
  • assicurati che il repository del server stia utilizzando il telecomando che ti aspetti (ssh in, cd in repo /, ed esegui git remote -v) - potresti dover solo aggiornare il tuo :repo_urlin deploy.rb (ed eliminare il repository / dir).

Abbiamo un altro modo invece di eliminare il repo corrente?
hainguyen

4

Penso che la cartella venga popolata tramite un pull git, quindi non dovrebbe essere vuota. Se lo vedi vuoto, il problema è da git non dal tarball.

Il problema che ho avuto era che l'URL del mio repository capistrano deploy.rb era impostato su uno diverso da quello del progetto su cui stavo lavorando. Per risolvere questo problema, ho anche dovuto accedere al server ed eliminare la cartella app_name / repo che deve hanno memorizzato nella cache l'URL remoto non valido originale.


4
per le persone che cercano su Google: controlla anche se hai impostato il ramo esistente !!! ... ha funzionato per me :)
equivalente

4

Ogni volta che ho riscontrato questo errore è stato perché il ramo specificato nel mio file deploy / environment .rb non è stato controllato in git. Fai un add / commit / git push origin branch_name e questo probabilmente farà funzionare le cose.


0

Sto usando Bedrock Roots (wordpress) per lo sviluppo, capistrano per le distribuzioni e git flow. Sono incappato in questo errore durante il tentativo di distribuzione, mentre su hotfix / xxx branch localmente. Quindi ho terminato la corrente (modifiche unite per sviluppare il ramo) e poi ho implementato con successo.


Capisci perché la fusione in Develop ha risolto il tuo problema?
Eric Francis

La distribuzione di altri rami può funzionare, ma resta la domanda: perché quello in particolare che stai cercando di distribuire non funziona? Potrei avere una risposta.
Jorge Orpinel

@EricFrancis In realtà, lo faccio ora) Come afferma la risposta votata, l'hotfix non esisteva sul telecomando (da dove viene distribuito capistrano)
Sergey Dubovik
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.