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

J’ai un déploiement simple via capistrano à partir d’un repository Git. Au début, je déployais le formulaire GitHub, tout fonctionnait très bien. Mais alors 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 ne fait que le contourner. Y a-t-il un moyen de dire à capistrano de laisser tomber l’ancien cache?

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 

Comme il efface chaque version (cache) du serveur.

Apparemment, vous devrez également supprimer la shared/cached-copy , car cela ne semble pas être nettoyé par l’appel ci-dessus.

Capistrano 2.X

Supprimez et re-clonez le repository en utilisant la nouvelle adresse:

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

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

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

Déployez à nouveau:

 cap deploy 

Capistrano 3.X

  1. Supprimez le $deploy_to/repo
  2. Modifiez votre config/deploy.rb (identique à 2.X)
  3. cap deploy

Capistrano 2 et ci-dessous

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

Capistrano 3 et plus

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

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

J’ai résolu ce problème avec 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, donc ça vaut la peine de les supprimer une fois que vous êtes à l’aise avec toutes vos cibles de déploiement.

Vous devez changer l’ origine de git dans votre dossier / shared / copy-copy

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

essayez de déployer la production de cap

Le moyen le plus simple est de remplacer l’URL du repository par le nouveau en .git / config dans le répertoire shared / cached-copy du serveur Web. Ensuite, vous pouvez faire un déploiement normal comme d’habitude.

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

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

Si vous avez besoin de faire beaucoup de repo, vous voudrez peut-être y append 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 lancez-le une fois pour chaque étape:

 cap testing remove_git_cache_repo 

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

Donc, déposez-le dans deploy.rb , puis exécutez cap 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