113
 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失败?

4

7 回答 7

360

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

于 2014-05-29T15:09:26.880 回答
19

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

于 2014-05-27T16:55:27.460 回答
16

当要部署的服务器中的 repo 混乱时,就会发生这种情况。我们谈论的是默认情况下 Capistrano 会放入的裸 git repo /var/www/$application/repo(供其他人参考)。

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

  1. 它运行git archive作为导出所选分支树的一种方式。git archive “将其写入标准输出”,因此 Capistrano 将其重定向到tar以便立即将存档解压缩到新的发布目录中。(为什么 Capistrano 选择这个而不是 git checkout 让我失望。)

  2. tar失败,因为它什么也没收到 d:

我可以想到两种可能的解决方案/方法来解决问题:

  • 如@lugolabs 所述,SSH 进入服务器并手动删除 repo 文件夹(例如,在您的情况下为 /home/rails/rails-capistrano/repo)
  • 确保服务器的 repo 正在使用您期望的远程(ssh in,cd 到 repo/,然后运行git remote -v)——您可能只需要更新您:repo_url的 deploy.rb(并删除 repo/ 目录)。
于 2015-11-17T00:40:24.220 回答
4

我认为该文件夹是通过 git pull 填充的,所以它不应该是空的。如果您确实看到它是空的,则问题出在 git 而不是 tarball 上。

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

于 2014-02-09T00:13:43.130 回答
4

每当我遇到此错误时,都是因为我的部署/环境.rb 文件中指定的分支未检入 git。做一个 add / commit / git push origin branch_name,这可能会让事情顺利进行。

于 2016-09-30T08:52:26.217 回答
0

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

于 2015-08-26T12:47:11.780 回答
0

你可以设置你的分支deploy.rbset :branch, "main"

资源

注意:默认分支是master

于 2021-05-26T09:57:32.383 回答