Ошибка Capistrano tar: это не похоже на архив tar

 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      

меня смущают две вещи:

  1. Почему Капистрано работает git archive здесь:
    git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157

  2. Почему tar сбой?

6 ответов


У меня была та же проблема, пока я не понял, что вытягиваю несуществующую ветку из git.


удаление app_name / repo также исправило эту проблему для меня.


это происходит, когда РЕПО на сервере для развертывания перепутались. Мы говорим о голом РЕПО git, которое Капистрано по умолчанию поместил бы /var/www/$application/repo (для справки других людей).

в вашем случае у него нет локального особенность / Capistrano ветку, при запуске git archive feature/Capistrano ничего не выводится, что | трубы. Для подтверждения ssh на сервер, cd в /home / rails/rails-capistrano / repo и запустите git branch.

  1. это бег!--15-->git архив как способ экспорта дерева выбранной ветви. git архив "записывает его на стандартный вывод", Поэтому Capistrano перенаправляет это на деготь для того, чтобы немедленно распаковать архив в новый каталог выпуска. (Почему Капистрано выбрал это вместо git checkout, меня поражает.)

  2. деготь не удается, потому что он ничего не получает d:

Я могу придумать два возможных решения / способа устранения неполадок:

  • ssh на сервер и вручную удалите папку РЕПО (например, в вашем случае /home/rails/rails-capistrano/repo), как указано @lugolabs
  • убедитесь, что РЕПО сервера использует ожидаемый пульт дистанционного управления (ssh in, cd в repo/ и run git remote -v) - возможно, Вам просто нужно обновить :repo_url в развернуть.rb (и исключить РЕПО/ реж).

Я думаю, что эта папка заполняется через git pull, поэтому она не должна быть пустой. Если вы видите его пустым, проблема заключается в git, а не в tarball.

проблема у меня была моя Capistrano deploy.URL репозитория rb был установлен на другой, чем тот проект, в котором я работал. Чтобы устранить эту проблему, мне также пришлось войти на сервер и удалить папку app_name/repo, которая должна была кэшировать исходный плохой удаленный URL.


всякий раз, когда я попал в эту ошибку, это было потому, что ветка, указанная в моем deploy/среда.файл rb не был зарегистрирован в git. Сделайте add / commit / git push origin branch_name и это, вероятно, заставит все работать.


Я использую корни коренных пород (wordpress) для разработки, capistrano для развертывания и git flow. Наткнулся на эту ошибку при попытке развертывания, в то время как на исправление/x.X. X ветвь локально. Поэтому я закончил текущие (объединенные изменения для разработки ветви), а затем успешно развернул.