Capistrano-Fehler tar: Dies sieht nicht wie ein Teerarchiv aus

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      

Ich bin verwirrt über zwei Dinge:

  1. Warum läuft Capistrano git archivehier:
    git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157

  2. Warum tarscheitert?

Eric Francis
quelle

Antworten:

321

Ich hatte das gleiche Problem, bis mir klar wurde, dass ich den nicht vorhandenen Zweig aus Git zog.

kubbing
quelle
53
So ein Stirnklatscher.
Grant Birchmeier
20
Ich bin auch der Dumme
Notaceo
12
Das zweite Mal, wenn ich auf deine Antwort stoße, das zweite Mal, wenn dies passiert ist, fühle ich mich dumm!
Fabian de Pabian
11
Ich bin froh, dass diese Frage so viele positive Stimmen hat. Zumindest versage ich nicht einsam.
Shreddern
6
Im Ernst, dies ist wahrscheinlich das 42. Mal, dass ich die gleiche Google-Suche mache und diese Antwort lese xD
Cyril Duchon-Doris
19

Das Löschen von app_name / repo hat dieses Problem auch für mich behoben.

Lugolabs
quelle
1
Dies hat bei mir manchmal funktioniert, wenn es Repo-Probleme mit der Cap-Bereitstellung gibt, aber nicht immer.
Jorge Orpinel
15

Dies passiert, wenn das Repo auf dem zu implementierenden Server durcheinander ist. Wir sprechen über das Bare-Git-Repo, das Capistrano standardmäßig einfügt /var/www/$application/repo(als Referenz für andere Leute).

In Ihrem Fall hat es keine lokale Funktion / Capistrano- Verzweigung, sodass beim Ausführen git archive feature/Capistranonichts an diese |Pipe ausgegeben wird . Zur Bestätigung ssh in den Server, cd in / home / Rails / Rails-Capistrano / Repo und ausführen git branch.

  1. Es wird das Git-Archiv ausgeführt , um den Baum des ausgewählten Zweigs zu exportieren. Das Git-Archiv "schreibt es in die Standardausgabe aus", so dass Capistrano es an tar weiterleitet, um das Archiv sofort in Ihr neues Release-Verzeichnis zu dekomprimieren. (Warum Capistrano dies anstelle von Git Checkout gewählt hat, besiegt mich.)

  2. Teer schlägt fehl, weil er nichts empfängt. d:

Ich kann mir zwei mögliche Lösungen / Möglichkeiten zur Fehlerbehebung vorstellen:

  • ssh in den Server und löschen Sie den Repo-Ordner (z. B. in Ihrem Fall / home / Rails / Rails-Capistrano / Repo) manuell, wie von @lugolabs erwähnt
  • Stellen Sie sicher, dass das Repo des Servers die von Ihnen erwartete Fernbedienung verwendet (ssh in, cd in repo / und ausführen git remote -v). Möglicherweise müssen Sie nur Ihre :repo_urlin deploy.rb aktualisieren (und das Repo / Verzeichnis löschen).
Jorge Orpinel
quelle
Haben wir eine andere Möglichkeit, anstatt das aktuelle Repo zu löschen?
Hainguyen
4

Ich denke, dass der Ordner über einen Git-Pull gefüllt wird, also sollte er nicht leer sein. Wenn Sie es leer sehen, ist das Problem vom Git, nicht vom Tarball.

Das Problem, das ich hatte, war, dass die URL meines capistrano deploy.rb-Repositorys auf eine andere URL als das Projekt festgelegt wurde, in dem ich gearbeitet habe. Um dieses Problem zu beheben, musste ich mich auch beim Server anmelden und den Ordner app_name / repo löschen, der benötigt wird habe die ursprüngliche fehlerhafte Remote-URL zwischengespeichert.

LessQuesar
quelle
4
für googelnde Leute: Überprüfen Sie auch, ob Sie einen vorhandenen Zweig eingestellt haben !!! ... hat für mich gearbeitet :)
Äquivalent8
4

Immer wenn ich auf diesen Fehler gestoßen bin, wurde der in meiner .rb-Datei für die Bereitstellung / Umgebung angegebene Zweig nicht in git eingecheckt. Führen Sie einen add / commit / git-Push-Ursprungszweig aus, und das wird wahrscheinlich dazu führen, dass die Dinge funktionieren.

Fuzzygroup
quelle
0

Ich verwende Bedrock Roots (WordPress) für die Entwicklung, Capistrano für Bereitstellungen und Git Flow. Stolperte über diesen Fehler, als versucht wurde, ihn bereitzustellen, während er sich lokal im Hotfix / xxx-Zweig befand. Also beendete ich die aktuelle (zusammengeführte Änderungen, um den Zweig zu entwickeln) und stellte sie dann erfolgreich bereit.

Sergey Dubovik
quelle
Verstehst du, warum das Zusammenführen mit Develop Ihr ​​Problem behoben hat?
Eric Francis
Das Bereitstellen anderer Zweige funktioniert möglicherweise, aber die Frage bleibt, warum der bestimmte Zweig, den Sie bereitstellen möchten, nicht funktioniert. Ich kann eine Antwort haben.
Jorge Orpinel
@EricFrancis Eigentlich tue ich das jetzt) ​​Wie die gewählte Antwort besagt, gab es keinen Hotfix auf der Fernbedienung (von wo aus Capistrano bereitgestellt wird)
Sergey Dubovik