75 votes

Le déploiement de Capistrano a échoué après la modification de 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 a bien fonctionné. Mais ensuite, j'ai 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 simplement. Est-ce que je peux dire à Capistrano de simplement déposer l'ancienne cache?

106voto

Justin Tanner Points 5437

En tant que Jakub Arnold et nil correctement commenté que le problème réside dans l' shared/cached-copy répertoire.

Tout d'abord supprimer et re-cloner le repo à l'aide de la nouvelle adresse:

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

Modifiez ensuite votre config/deploy.rb à utiliser le nouveau repo:

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

Et enfin déployer:

cap deploy

Mise à JOUR:

Fred Oliveira fait observer que dans l'capistrano 3.1 shared/cached-copy est désormais shared/repo

45voto

robustus Points 1850

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

 cap deploy:cleanup -s keep_releases=0
 

cela devrait fonctionner, car il efface toutes les versions (cache) du serveur.

Apparemment, vous devrez également supprimer shared/cached-copy , car cela ne semble pas avoir été nettoyé par l'appel capistrano ci-dessus (d'après le commentaire ci-dessous).

15voto

Guilherme Viebig Points 1403

Capistrano 3 et plus

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 2 et inférieur

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

Vérifier la correction des déploiements de Capistrano 3 après une modification du référentiel

6voto

sheldonh Points 1173

J'ai résolu ce problème avec les éléments suivants en 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"
 

Les déploiements sont un peu plus lents, il est donc utile de les supprimer une fois que vous êtes certain que toutes vos cibles de déploiement ont été rattrapées.

0voto

Sævar Points 820

La méthode la plus simple consiste simplement à remplacer l’URL du référentiel par la nouvelle dans .git / config dans le répertoire shared / cached-copy du serveur Web. Ensuite, vous pouvez faire un déploiement normal comme d'habitude.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X