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

时间:2011-12-02 15:01:47

标签: ruby deployment capistrano

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

fatal: Could not parse object '9cfb...'.

一旦我改变

,问题就消失了
set :deploy_via, :remote_cache

set :deploy_via, :copy

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

10 个答案:

答案 0 :(得分:105)

Capistrano 2.X

使用新地址删除并重新克隆回购:

cd $deploy_to/shared
rm -rf cached-copy
git clone ssh://git@example.org/new/repo.git cached-copy

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

set :repository, "ssh://git@example.org/new/repo.git"
set :scm, :git
set :deploy_via, :remote_cache

再次部署:

cap deploy

Capistrano 3.X

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

答案 1 :(得分:45)

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

cap deploy:cleanup -s keep_releases=0

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

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

答案 2 :(得分:14)

Capistrano 2及以下

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

Capistrano 3及以上

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

检查Fixing Capistrano 3 deployments after a repository change

答案 3 :(得分: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"

它使部署速度稍慢,所以一旦你感到满意,你的所有部署目标都已经赶上了,就值得删除。

答案 4 :(得分:3)

您需要在 / shared / cached-copy 文件夹中更改git 来源

cd /var/www/your-project/production/shared/cached-copy
git remote remove origin
git remote add origin git@bitbucket.org:/origin.git

尝试限制生产部署

答案 5 :(得分:0)

最简单的方法是将repo url更改为web服务器上shared / cached-copy目录中.git / config中的新repl url。然后你可以照常进行正常部署。

答案 6 :(得分:0)

取决于你的版本Capistrano 3与它的老祖先不同:

在此处阅读我的原始答案以及如何解决类似问题Capistrano error when change repository using git

答案 7 :(得分:0)

如果你需要做很多回购,你可能想为它添加一个任务。

对于capistrano 3,您可以在deploy.rb中添加此任务

desc "remove remote git cache repository"
  task :remove_git_cache_repo do
      on roles(:all) do
    execute "cd #{fetch(:deploy_to)} && rm -Rf repo"
  end
end

然后为每个阶段运行一次:

cap testing remove_git_cache_repo

答案 8 :(得分:0)

这是this answer所讨论的Capistrano 3版本。做每个服务器上的答案建议可能是单调乏味的。

然后将其放入temp.my_class { field = my_custom_class wrap = class="|" } : 10.renderObj.renderObj.params < temp.my_class ,然后运行deploy.rb

cap <environment> deploy:fix_repo_origin

答案 9 :(得分:-1)

对于Capistrano 3.0 +

  1. 在config / deploy.rb中更改存储库URL

  2. 在服务器上的your_project / repo / config文件中更改存储库URL。