Ошибка Capistrano: это не похоже на 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      

Я запутался в двух вещах:

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

  • Почему tar не работает?

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

  • Он запускает git archive как способ экспорта выбранного дерева ветвей. git archive "записывает его на стандартный вывод", поэтому Capistrano перенаправляет это на tar, чтобы немедленно распаковать архив в новую папку выпуска. (Почему Капистрано выбрал это вместо git checkout побеждает меня.)

  • tar терпит неудачу, потому что он ничего не получает d:

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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