Capistrano错误tar:这看起来不像tar档案

时间:2014-01-14 23:53:59

标签: capistrano rvm-capistrano capistrano3

 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. 为什么Capistrano在这里运行git archive
    git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157

  2. 为什么tar失败?

7 个答案:

答案 0 :(得分:276)

我有同样的问题,直到我意识到我从git中拉出了不存在的分支。

答案 1 :(得分:19)

删除app_name / repo也为我解决了这个问题。

答案 2 :(得分:14)

当要部署的服务器中的repo搞砸了,就会发生这种情况。我们正在谈论Capistrano默认会放入/var/www/$application/repo的裸git仓库(供其他人参考)。

在您的情况下,它没有本地功能/ Capistrano 分支,因此在运行git archive feature/Capistrano时,不会向该|管道输出任何内容。要确认,请进入服务器,进入/ home / rails / rails-capistrano / repo,然后运行git branch

  1. 它正在运行git archive作为导出所选分支树的方法。 git archive "将其写入标准输出"所以Capistrano将其重定向到 tar ,以便立即将存档解压缩到新版本目录中。 (为什么Capistrano选择了这个而不是git checkout让我失望。)

  2. tar 失败,因为它没有收到任何费用d:

  3. 我可以考虑两种可能的解决方案/解决方法:

    • ssh进入服务器并手动删除repo文件夹(例如在你的情况下/ home / rails / rails-capistrano / repo),如@lugolabs所述
    • 确保服务器的repo正在使用您期望的遥控器(ssh in,cd into repo /,并运行git remote -v) - 您可能只需更新:repo_url 1:}在deploy.rb中(并删除repo / dir)。

答案 3 :(得分:4)

我认为该文件夹通过git pull填充,因此它不应为空。如果你确实看到它是空的,问题来自git而不是tarball。

我遇到的问题是我的capistrano deploy.rb存储库URL被设置为与我工作的项目不同的一个。为了解决这个问题,我还必须登录到服务器并删除app_name / repo必须缓存原始错误远程URL的文件夹。

答案 4 :(得分:4)

每当我遇到此错误时,都是因为我的deploy / 环境 .rb文件中指定的分支未被检入git。添加/提交/ git推送源 branch_name ,这可能会使事情有效。

答案 5 :(得分:0)

我正在使用Bedrock Roots(wordpress)进行开发,使用capistrano进行部署和git流程。 在尝试部署时偶然发现此错误,而在本地修补程序/ x.x.x分支上。所以我完成了当前(开发分支的合并更改),然后成功部署。

答案 6 :(得分:0)

您可以使用以下命令在 deploy.rb 上设置分支: set :branch, "main"

source

注意:默认分支是master