После того, как я изменил 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 на веб-сервере. Затем вы можете выполнить обычное развертывание, как обычно.
Ответ 7
В зависимости от вашей версии Capistrano 3 отличается от предыдущих предков:
Прочитайте мой оригинальный ответ здесь и как исправить подобные проблемы Ошибка Capistrano при репозитории изменений с помощью git
Ответ 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