Capistrano 错误 tar:这看起来不像 tar 存档
Posted
技术标签:
【中文标题】Capistrano 错误 tar:这看起来不像 tar 存档【英文标题】:Capistrano error tar: This does not look like a tar archive 【发布时间】:2014-02-03 06:40:50 【问题描述】: 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 中拉出不存在的分支。
【讨论】:
这样的额头。 第二次遇到你的回答,第二次出现这种情况,感觉很傻! 我很高兴这个问题有这么多的赞成票。至少我不会孤独地失败。 这可能是问题的原因,但并不能真正回答所提出的问题。埃里克似乎没有以这种方式解决他的问题。我会发布一个替代品。回答。 说真的,这可能是我第 42 次做同样的谷歌搜索并阅读这个答案 xD【参考方案2】:删除 app_name/repo 也为我解决了这个问题。
【讨论】:
每当 cap deploy 出现 repo 问题时,这对我有用,但并非总是如此。【参考方案3】:当要部署的服务器中的 repo 混乱时,就会发生这种情况。我们谈论的是 Capistrano 默认情况下会放入 /var/www/$application/repo
的裸 git repo(供其他人参考)。
在您的情况下,它没有本地 feature/Capistrano 分支,因此在运行 git archive feature/Capistrano
时,不会向该 |
管道输出任何内容。为了确认,ssh 进入服务器,cd 进入 /home/rails/rails-capistrano/repo,然后运行git branch
。
它运行git archive 作为导出所选分支树的一种方式。 git archive “将其写入标准输出”,因此 Capistrano 将其重定向到 tar 以便立即将存档解压缩到新的发布目录中。 (为什么 Capistrano 选择这个而不是 git checkout 让我失望。)
tar 失败,因为它什么也没收到 d:
我能想到两种可能的解决方案/方法来解决问题:
ssh 进入服务器并手动删除@lugolabs 提到的 repo 文件夹(例如,在您的情况下为 /home/rails/rails-capistrano/repo) 确保服务器的 repo 正在使用您期望的远程(ssh in,cd 到 repo/,然后运行 git remote -v
)——您可能只需要在 deploy.rb 中更新您的 :repo_url
(并删除存储库/目录)。
【讨论】:
除了删除当前的 repo,我们还有其他方法吗?【参考方案4】:我认为该文件夹是通过 git pull 填充的,因此它不应该为空。如果您确实看到它是空的,则问题来自 git 而不是 tarball。
我遇到的问题是我的 capistrano deploy.rb 存储库 URL 设置为与我正在从事的项目不同的 URL。为了解决此问题,我还必须登录到服务器并删除 app_name/repo必须缓存原始错误远程 URL 的文件夹。
【讨论】:
对于谷歌搜索的人:还要检查你是否设置了现有的分支!!! ...为我工作:)【参考方案5】:每当我遇到此错误时,都是因为我的 deploy/environment.rb 文件中指定的分支未检入 git。执行 add / commit / git push origin branch_name,这可能会让事情顺利进行。
【讨论】:
【参考方案6】:我使用 Bedrock Roots (wordpress) 进行开发,使用 capistrano 进行部署和 git flow。 尝试部署时偶然发现此错误,而在本地 hotfix/x.x.x 分支上。所以我完成了当前(合并更改到开发分支),然后成功部署。
【讨论】:
你明白为什么合并到开发可以解决你的问题吗? 部署其他分支可能会起作用,但问题仍然是为什么您尝试部署的特定分支不起作用?我可能有答案。 @EricFrancis 实际上,我现在这样做了)正如投票答案所述,远程(capistrano 从哪里部署)上不存在修补程序【参考方案7】:您可以在deploy.rb
上设置您的分支:
set :branch, "main"
source
注意:默认分支是master
【讨论】:
以上是关于Capistrano 错误 tar:这看起来不像 tar 存档的主要内容,如果未能解决你的问题,请参考以下文章
Rails 3 -- Bundler/Capistrano 错误
SwiftUI ForEach Binding 编译时错误看起来不像 for-each
Capistrano 与 PostgreSQL,错误:其他用户正在访问数据库