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?
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.
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
$deploy_to/repo
répertoireconfig/deploy.rb
(identique à 2.X)cap deploy
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
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é.
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
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
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
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