更改存储库URL后,Capistrano部署失败

Jak*_*old 74 ruby deployment capistrano

我通过Capitrano从Git存储库进行了简单的部署.起初我正在部署GitHub表单,一切正常.但后来我将我的存储库移动到BitBucket,现在我已经到了

fatal: Could not parse object '9cfb...'.
Run Code Online (Sandbox Code Playgroud)

一旦我改变,问题就消失了

set :deploy_via, :remote_cache
Run Code Online (Sandbox Code Playgroud)

set :deploy_via, :copy
Run Code Online (Sandbox Code Playgroud)

但这并没有解决问题,只能绕过它.有什么办法我可以告诉capistrano只丢弃旧缓存吗?

Jus*_*ner 105

Capistrano 2.X

使用新地址删除并重新克隆存储库:

cd $deploy_to/shared
rm -rf cached-copy
git clone ssh://git@example.org/new/repo.git cached-copy
Run Code Online (Sandbox Code Playgroud)

修改您config/deploy.rb的使用新的repo:

set :repository, "ssh://git@example.org/new/repo.git"
set :scm, :git
set :deploy_via, :remote_cache
Run Code Online (Sandbox Code Playgroud)

再次部署:

cap deploy
Run Code Online (Sandbox Code Playgroud)

Capistrano 3.X

  1. 删除$deploy_to/repo目录
  2. 修改你的config/deploy.rb(与2.X相同)
  3. cap deploy

  • 请记住,capistrano 3.1使用`shared/repo`而不是`shared/cached-copy`,所以这个答案虽然几乎是正确的,但应该更新. (7认同)
  • 我会说这是更好的答案.如果删除所有版本,如果新部署失败并且无法回滚,则基本上处于糟糕状态.我还认为值得注意的是,只需将主机添加到已知主机即可手动克隆repo.如果它已经添加,那么部署将起作用(基本上与第一次设置capistrano时相同,检查任何地方的repo只是为了添加它) (5认同)
  • 在capistrano 3.2.1中我解决了删除`$ deploy_to/repo`文件夹,因为我在`shared`中找不到任何`repo`文件夹. (4认同)

rob*_*tus 45

我得说我不确定,因为我无法测试这个,但这应该有效:

cap deploy:cleanup -s keep_releases=0
Run Code Online (Sandbox Code Playgroud)

因为它从服务器擦除每个版本(缓存).

显然你也需要删除shared/cached-copy,因为根据下面的评论,上面的Capistrano调用似乎没有清除.

  • 这并没有完全解决问题,但是一旦我删除了`shared/cached-copy`,它现在部署得很好. (65认同)
  • 从Capistrano 3开始,你必须删除`/ repo`而不是`shared/cached-copy`.编辑:见[Justin Tanner的回答](http://stackoverflow.com/a/17618176/727341) (7认同)
  • 您只需将远程源URL更改为`shared/cached-copy`目录中的新repo地址即可. (5认同)
  • 答案只删除服务器上的所有版本(包括当前版本).最佳答案(如果您有远程缓存处于活动状态)是Jakub Arnold的答案. (2认同)

Gui*_*big 14

Capistrano 2及以下

SSH到您的服务器并更新./shared/cached-copy/.git/config部署文件夹的repo ,或者只删除./shared/cached-copy

Capistrano 3及以上

SSH到您的服务器并更新./repo/config部署文件夹的repo .

更改存储库后,检查修复Capistrano 3部署


she*_*onh 6

我用以下内容解决了这个问题deploy.rb:

namespace :deploy do
  task :cope_with_git_repo_relocation do
    run "if [ -d #{shared_path}/cached-copy ]; then cd #{shared_path}/cached-copy && git remote set-url origin #{repository}; else true; fi"
  end
end
before "deploy:update_code", "deploy:cope_with_git_repo_relocation"
Run Code Online (Sandbox Code Playgroud)

它使部署速度稍慢,因此一旦您感到满意,所有部署目标都已赶上,就值得删除.