Tar de error de Capistrano: esto no parece un archivo 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      

Estoy confundido por dos cosas:

  1. ¿Por qué Capistrano se está ejecutando git archiveaquí?
    git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157

  2. ¿Por qué está tarfallando?

Eric Francis
fuente

Respuestas:

321

Tuve el mismo problema, hasta que me di cuenta de que estaba sacando la rama inexistente de git.

kubbing
fuente
53
Qué golpe en la frente.
Grant Birchmeier
20
Yo también soy el tonto
notaceo
12
La segunda vez que encuentro tu respuesta, la segunda vez que esto sucedió, ¡me siento tonto!
Fabian de Pabian
11
Me alegra que esta pregunta tenga tantos votos a favor. Al menos no fallo solo.
trituración
6
En serio, esta es probablemente la 42a vez que hago la misma búsqueda en Google y leo esta respuesta xD
Cyril Duchon-Doris
19

Eliminar app_name / repo también solucionó este problema para mí.

lugolabs
fuente
1
Esto me ha funcionado algunas veces cuando hay problemas de repositorio con la implementación de límites, pero no siempre.
Jorge Orpinel
15

Esto sucede cuando el repositorio en el servidor para implementar está dañado. Estamos hablando del repositorio git desnudo que Capistrano colocaría por defecto /var/www/$application/repo(para referencia de otras personas).

En su caso, no tiene una función local / rama Capistrano , por lo que cuando se ejecuta, git archive feature/Capistranono se envía nada a esa |tubería. Para confirmar, ssh en el servidor, cd en / home / rails / rails-capistrano / repo y ejecuta git branch.

  1. Está ejecutando git archive como una forma de exportar el árbol de la rama seleccionada. git archive "lo escribe en la salida estándar", por lo que Capistrano lo redirige a tar para descomprimir el archivo inmediatamente en su nuevo directorio de lanzamiento. (Por qué Capistrano eligió esto en lugar de git checkout me derrota).

  2. tar falla porque no recibe nada d:

Puedo pensar en dos posibles soluciones / formas de solucionar problemas:

  • ssh en el servidor y elimine manualmente la carpeta del repositorio (por ejemplo, en su caso / home / rails / rails-capistrano / repo) como lo menciona @lugolabs
  • asegúrese de que el repositorio del servidor esté usando el control remoto que espera (ssh in, cd into repo / y ejecute git remote -v); es posible que solo necesite actualizar su :repo_urlen deploy.rb (y eliminar el repo / dir).
Jorge Orpinel
fuente
¿Tenemos otra forma en lugar de eliminar el repositorio actual?
hainguyen
4

Creo que esa carpeta se llena a través de un git pull, por lo que no debería estar vacía. Si lo ve vacío, el problema es del git, no del tarball.

El problema que tuve fue que la URL de mi repositorio de capistrano deploy.rb estaba configurada en una diferente a la del proyecto en el que estaba trabajando. Para solucionar este problema, también tuve que iniciar sesión en el servidor y eliminar la carpeta app_name / repo que debe han estado almacenando en caché la URL remota incorrecta original.

LessQuesar
fuente
4
para la gente que busca en Google: ¡también verifique si configuró una rama existente! ... funcionó para mí :)
equivalente 8
4

Siempre que encontré este error fue porque la rama especificada en mi archivo deploy / environment .rb no se registró en git. Haga un add / commit / git push origin branch_name y eso probablemente hará que las cosas funcionen.

grupo difuso
fuente
0

Estoy usando Bedrock Roots (wordpress) para desarrollo, capistrano para implementaciones y git flow. Me encontré con este error al intentar implementarlo, mientras estaba en la rama hotfix / xxx localmente. Así que terminé actual (cambios combinados para desarrollar la rama) y luego lo implementé con éxito.

Sergey Dubovik
fuente
¿Entiende por qué fusionarse con desarrollar solucionó su problema?
Eric Francis
La implementación de otras ramas puede funcionar, pero la pregunta sigue siendo ¿por qué la que está intentando implementar no funciona? Puede que tenga una respuesta.
Jorge Orpinel
@EricFrancis En realidad, lo hago ahora) Como dice la respuesta votada, la revisión no existía en el control remoto (desde donde se despliega capistrano)
Sergey Dubovik