После того, как я изменил URL-адрес репозитория, развертывание Capistrano завершилось неудачно

У меня есть простое развертывание через capistrano из репозитория Git. Сначала я развертывал форму GitHub, все работало отлично. Но затем я переместил свой репозиторий в BitBucket, и теперь я получаю

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

Проблема исчезает после изменения

set :deploy_via, :remote_cache

to

set :deploy_via, :copy

но это не устраняет проблему, она только обходит ее. Есть ли способ, которым я могу сказать, что capistrano просто отбрасывает старый кеш?

Ответ 1

Я должен сказать, что я не уверен, так как я не смог проверить это, но это должно работать:

cap deploy:cleanup -s keep_releases=0

Так как он вытирает каждую версию (кеш) с сервера.

Очевидно, вам также потребуется удалить shared/cached-copy, потому что это, похоже, не очищается вызовом Capistrano выше в соответствии с комментарием ниже.

Ответ 2

Capistrano 2.X

Удаление и повторное клонирование репо с использованием нового адреса:

cd $deploy_to/shared
rm -rf cached-copy
git clone ssh://[email protected]/new/repo.git cached-copy

Измените свой config/deploy.rb, чтобы использовать новое репо:

set :repository, "ssh://[email protected]/new/repo.git"
set :scm, :git
set :deploy_via, :remote_cache

Повторное развертывание:

cap deploy

Capistrano 3.X

  • Удалите каталог $deploy_to/repo
  • Измените свой config/deploy.rb (тот же, что и 2.X)
  • cap deploy

Ответ 3

Capistrano 2 и ниже

SSH на ваш сервер и обновите репо в ./shared/cached-copy/.git/config папки развертывания или просто удалите ./shared/cached-copy

Capistrano 3 и выше

SSH на ваш сервер и обновите репо в ./repo/config папки развертывания.

Проверить Исправление развертываний Capistrano 3 после изменения репозитория

Ответ 4

Я решил это со следующим в 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"

Он делает развертывание немного медленнее, поэтому стоит сделать это, когда вам будет удобно, что все ваши цели развертывания догнали.

Ответ 5

Вам нужно изменить git происхождение в папке /shared/cached-copy

cd /var/www/your-project/production/shared/cached-copy
git remote remove origin
git remote add origin [email protected]:/origin.git

попробуйте развертывание крышки

Ответ 6

Самый простой способ - просто изменить URL-адрес репо на новый в .git/config в каталоге shared/cached-copy на веб-сервере. Затем вы можете выполнить обычное развертывание, как обычно.

Ответ 8

Если вам нужно сделать много репо, вы можете добавить к ней задачу.

Для 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

Ответ 9

Здесь описывается версия Capistrano 3 о том, что этот ответ. Было бы утомительно делать то, что предлагает ответ на каждом сервере.

Итак, оставьте это в deploy.rb, а затем запустите cap <environment> deploy:fix_repo_origin

namespace :deploy do
  desc 'Fix repo origin, for use when changing git repo URLs'
  task :fix_repo_origin do
    on roles(:web) do
      within repo_path do
        execute(:git, "remote set-url origin #{repo_url}")
      end
    end
  end
end