Ich habe eine einfache Bereitstellung über capistrano aus einem Git-Repository. Zuerst habe ich Form GitHub bereitgestellt, alles hat gut funktioniert. Aber dann habe ich mein Repository auf BitBucket verschoben und jetzt bekomme ich
fatal: Could not parse object '9cfb...'.
Das Problem verschwindet, sobald ich mich umziehe
set :deploy_via, :remote_cache
zu
set :deploy_via, :copy
Aber das behebt das Problem nicht, es umgeht es nur. Kann ich Capistrano auf irgendeine Weise anweisen, den alten Cache einfach zu löschen?
ruby
deployment
capistrano
Jakub Arnold
quelle
quelle
shared/cached-copy
, wird es jetzt einwandfrei bereitgestellt.shared/cached-copy
Verzeichnis ändern ./repo
statt löschenshared/cached-copy
. Bearbeiten: Siehe Justin Tanners AntwortCapistrano 2.X.
Löschen Sie das Repo und klonen Sie es erneut unter der neuen Adresse:
cd $deploy_to/shared rm -rf cached-copy git clone ssh://[email protected]/new/repo.git cached-copy
Ändern Sie Ihre
config/deploy.rb
, um das neue Repo zu verwenden:set :repository, "ssh://[email protected]/new/repo.git" set :scm, :git set :deploy_via, :remote_cache
Erneut bereitstellen:
Capistrano 3.X.
$deploy_to/repo
Verzeichnisconfig/deploy.rb
(wie 2.X)cap deploy
quelle
:remove_cache
, dass Sie etwas im Verzeichnis der zwischengespeicherten Kopien benötigen, wird Capistrano nicht bereitgestellt.shared/repo
stattdessenshared/cached-copy
sodass diese Antwort, obwohl sie fast korrekt ist, aktualisiert werden sollte.$deploy_to/repo
Ordners gelöst, da ich keinenrepo
Ordner in gefunden habeshared
.Capistrano 2 und darunter
SSH auf Ihren Server und aktualisieren Sie das Repo im
./shared/cached-copy/.git/config
Bereitstellungsordner oder entfernen Sie einfach das./shared/cached-copy
Capistrano 3 und höher
SSH auf Ihren Server und aktualisieren Sie das Repo im
./repo/config
Bereitstellungsordner.Aktivieren Sie das Kontrollkästchen Capistrano 3-Bereitstellungen nach einer Repository-Änderung reparieren
quelle
./repo/config
path_to_your_repo/repo/config
Ich habe dies mit folgendem gelöst
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"
Dadurch werden Bereitstellungen etwas langsamer. Es lohnt sich daher, sie zu entfernen, sobald Sie sicher sind, dass alle Bereitstellungsziele aufgeholt haben.
quelle
Sie müssen den Git- Ursprung in Ihrem Ordner / shared / cached-copy ändern
cd /var/www/your-project/production/shared/cached-copy git remote remove origin git remote add origin git@bitbucket.org:/origin.git
Versuchen Sie, die Cap-Produktion bereitzustellen
quelle
Am einfachsten ist es, die Repo-URL in die neue in .git / config im Verzeichnis shared / cached-copy auf dem Webserver zu ändern. Dann können Sie wie gewohnt eine normale Bereitstellung durchführen.
quelle
Abhängig von Ihrer Version unterscheidet sich Capistrano 3 von seinen älteren Vorfahren:
Lesen Sie hier meine ursprüngliche Antwort und wie Sie ähnliche Probleme beheben können. Capistrano-Fehler beim Ändern des Repositorys mit git
quelle
Wenn Sie viele Repos machen müssen, möchten Sie vielleicht eine Aufgabe dafür hinzufügen.
Für capistrano 3 fügen Sie diese Aufgabe in Ihre deploy.rb ein
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
Und dann einmal für jede Phase ausführen:
quelle
Hier ist die Capistrano 3-Version dessen, worüber diese Antwort spricht. Es kann mühsam sein, auf jedem Server das zu tun, was die Antwort vorschlägt.
Also lass es rein
deploy.rb
und renne danncap <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
quelle
Für Capistrano 3.0+
Ändern Sie die Repository-URL in Ihrer config / deploy.rb
Ändern Sie die Repository-URL in der Datei your_project / repo / config auf dem Server.
quelle