Сбой развертывания Capistrano после того, как я изменил URL хранилища - PullRequest
74 голосов
/ 02 декабря 2011

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

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

Проблема исчезнет, ​​как только я поменяю

set :deploy_via, :remote_cache

до

set :deploy_via, :copy

но это не решает проблему, оно только обходит ее. Можно ли как-нибудь сказать капистрано просто удалить старый кеш?

Ответы [ 10 ]

105 голосов
/ 12 июля 2013

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, чтобы использовать новое репо:

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
45 голосов
/ 03 декабря 2011

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

cap deploy:cleanup -s keep_releases=0

Поскольку он стирает каждый релиз (кэш) с сервера.

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

14 голосов
/ 21 октября 2014

Capistrano 2 и ниже

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

Capistrano 3 и выше

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

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

6 голосов
/ 08 октября 2013

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

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

3 голосов
/ 24 июня 2015

Вам нужно изменить git origin в вашей папке / shared / cached-copy

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

try cap production deploy

0 голосов
/ 28 февраля 2019

Для Capistrano 3.0 +

  1. Измените URL хранилища в вашем config / deploy.rb

  2. Измените URL хранилища в файле your_project / repo / config на сервере.

0 голосов
/ 10 октября 2017

Вот версия 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
0 голосов
/ 16 сентября 2016

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

Для 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
0 голосов
/ 26 мая 2014

Зависит от вашей версии Capistrano 3 отличается от своих более старых предков:

Прочитайте мой оригинальный ответ здесь и как исправить подобные проблемы Ошибка Capistrano при изменении репозитория с помощью git

0 голосов
/ 23 мая 2014

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

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