Capistrano error tar: Este não parece ser um arquivo 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      

Estou confuso sobre duas coisas:

  1. Por que Capistrano está funcionando git archiveaqui:
    git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157

  2. Por que está tarfalhando?

Respostas:


321

Eu tive o mesmo problema, até que percebi que estava puxando o branch inexistente do git.


53
Um tapa na testa.
Grant Birchmeier

20
Eu também sou o burro
notaceo

12
Na segunda vez que encontro sua resposta, na segunda vez que isso aconteceu, me sinto idiota!
Fabian de Pabian,

11
Estou feliz que esta pergunta tenha tantos votos positivos. Pelo menos eu não falho sozinho.
retalhamento de

6
Sério, esta é provavelmente a 42ª vez que estou fazendo a mesma pesquisa no Google e lendo esta resposta xD
Cyril Duchon-Doris

19

Excluir app_name / repo também corrigiu esse problema para mim.


1
Isso funcionou para mim algumas vezes sempre que há problemas de repo com implantação de cap, mas nem sempre.
Jorge Orpinel

15

Isso acontece quando o repo no servidor a ser implantado está bagunçado. Estamos falando sobre o repositório git que o Capistrano por padrão colocaria /var/www/$application/repo(para referência de outras pessoas).

No seu caso, ele não tem um recurso local / ramificação Capistrano , portanto, ao executar, git archive feature/Capistranonada é enviado para aquele |pipe. Para confirmar, ssh no servidor, cd em / home / rails / rails-capistrano / repo e execute git branch.

  1. Ele está executando o git archive como uma forma de exportar a árvore do branch selecionado. O arquivo git "grava na saída padrão", então Capistrano redireciona isso para tar , a fim de descompactar o arquivo imediatamente em seu novo diretório de lançamento. (Por que Capistrano escolheu isso em vez de checkout git me derrota.)

  2. tar falha porque não está recebendo nada d:

Posso pensar em duas soluções / maneiras possíveis de solucionar o problema:

  • ssh no servidor e exclua manualmente a pasta repo (por exemplo, no seu caso / home / rails / rails-capistrano / repo) como mencionado por @lugolabs
  • certifique-se de que o repo do servidor está usando o remoto que você espera (ssh in, cd em repo / e execute git remote -v) - você pode apenas precisar atualizar seu :repo_urlem deploy.rb (e excluir o repo / dir).

Temos outra maneira em vez de excluir o repositório atual?
hainguyen

4

Acho que essa pasta é preenchida por meio de um pull git, então não deve estar vazia. Se você vê-lo vazio, o problema é do git e não do tarball.

O problema que tive foi que a URL do meu repositório capistrano deploy.rb foi configurada para um diferente do projeto em que eu estava trabalhando. Para corrigir esse problema, também tive que fazer logon no servidor e excluir a pasta app_name / repo que deve têm armazenado em cache o URL remoto incorreto original.


4
para pesquisar no Google: verifique também se você definiu o branch existente !!! ... funcionou para mim :)
equivalente 8

4

Sempre que recebo esse erro, é porque o branch especificado em meu arquivo .rb de implantação / ambiente não foi verificado no git. Faça um add / commit / git push origin branch_name e isso provavelmente fará as coisas funcionarem.


0

Estou usando o Bedrock Roots (wordpress) para desenvolvimento, capistrano para deploys e git flow. Encontrei este erro quando tentei implantar, enquanto no ramo hotfix / xxx localmente. Então, terminei o atual (alterações mescladas para desenvolver o branch) e implantei com sucesso.


Você entende por que a fusão com o desenvolvimento corrigiu o seu problema?
Eric Francis

A implantação de outros branches pode funcionar, mas a questão permanece: por que aquele em particular que você está tentando implantar não está funcionando? Posso ter uma resposta.
Jorge Orpinel

@EricFrancis Na verdade, eu faço agora) Como afirma a resposta votada, o hotfix não existia no remoto (de onde capistrano é implantado)
Sergey Dubovik
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.