web-dev-qa-db-fra.com

Le déploiement de Capistrano échoue après avoir changé l'URL du référentiel

J'ai un déploiement simple via capistrano à partir d'un référentiel Git. Au début, je déployais GitHub, tout fonctionnait très bien. Mais j'ai ensuite déplacé mon référentiel vers BitBucket et maintenant je reçois

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

Le problème disparaît une fois que je change

set :deploy_via, :remote_cache

à

set :deploy_via, :copy

mais cela ne résout pas le problème, il le contourne seulement. Existe-t-il un moyen de dire à capistrano de simplement supprimer l'ancien cache?

74
Jakub Arnold

Je dois dire que je ne suis pas sûr, car je n'ai pas pu tester cela, mais cela devrait fonctionner:

cap deploy:cleanup -s keep_releases=0

Puisqu'il efface chaque version (cache) du serveur.

Apparemment, vous devrez également supprimer shared/cached-copy, car cela ne semble pas être nettoyé par l'appel Capistrano ci-dessus selon le commentaire ci-dessous.

45
robustus

Capistrano 2.X

Supprimez et reclonifiez le référentiel en utilisant la nouvelle adresse:

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

Modifiez votre config/deploy.rb pour utiliser le nouveau dépôt:

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

Déployez à nouveau:

cap deploy

Capistrano 3.X

  1. Retirer le $deploy_to/repo répertoire
  2. Modifiez votre config/deploy.rb (identique à 2.X)
  3. cap deploy
105
Justin Tanner

Capistrano 2 et inférieur

SSH sur votre serveur et mettez à jour le référentiel dans ./shared/cached-copy/.git/config du dossier de déploiement, ou supprimez simplement le ./shared/cached-copy

Capistrano 3 et supérieur

SSH sur votre serveur et mettez à jour le référentiel dans ./repo/config du dossier de déploiement.

Vérifier Correction des déploiements de Capistrano 3 après un changement de référentiel

14
Guilherme Viebig

J'ai résolu cela avec ce qui suit dans 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"

Cela rend les déploiements un peu plus lents, il vaut donc la peine d'être supprimé une fois que vous êtes sûr que toutes vos cibles de déploiement ont rattrapé.

6
sheldonh

Vous devez changer git Origin dans votre dossier / shared/cached-copy

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

essayez déploiement de la production de cap

3
comonitos

Voici la version Capistrano 3 de ce dont cette réponse parle. Il peut être fastidieux de faire ce que la réponse suggère sur chaque serveur.

Alors déposez ceci dans deploy.rb puis exécutez 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
ErJab

Dépend de votre version Capistrano 3 est différent de ses ancêtres plus anciens:

Lisez ma réponse originale ici et comment résoudre des problèmes similaires erreur Capistrano lors du changement de référentiel à l'aide de git

0
user1553777

Si vous avez besoin de faire beaucoup de repo, vous voudrez peut-être lui ajouter une tâche.

Pour capistrano 3, vous ajoutez cette tâche dans votre 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

Et puis exécutez-le une fois pour chaque étape:

cap testing remove_git_cache_repo
0
mipmip