2009-12-23 5 views
5

J'ai recherché tous les problèmes Capistrano pertinents, mais je n'ai pas trouvé quelque chose qui m'a même permis de comprendre quelque chose ici.Capistrano et Git, ruinant ma vie. "Impossible de résoudre la révision de [HEAD] sur le référentiel ..."

git version 1.6.4.2 
Capistrano v2.5.10 

En fait, quand je lance mon script deploy.rb cap, il se connecte au serveur, commence à exécuter la deploy: tâche de mise à jour, dans la deploy: tâche update_code:

*** [deploy:update_code] rolling back 
    * executing "rm -rf /home/user_name/public_html/project_name/releases/20091223094358; true" 
    servers: ["project_name.com"] 

Il échoue avec l'erreur suivante:

/Library/Ruby/Gems/1.8/gems/capistrano-2.5.10/lib/capistrano/recipes/deploy/scm/git.rb:231:in `query_revision': Unable to resolve revision for 'master' on repository 'ssh://[email protected]_ip:path_to_git_repository'. (RuntimeError) 

Voici mon script deploy, je l'ai essayé, y compris et en omettant:

set: branche 'master'

Je pensais aussi que mon chemin vers le dépôt était éteint, mais j'ai essayé à peu près toutes les permutations (absolu, pas absolu, suffixe .git, pas de suffixe). Il y a certainement un dépôt git nu sur le chemin que je pointe vers.

** J'ai plusieurs projets hébergés sur une seule tranche. Les autres projets sont aussi un projet de rails, mais ils utilisent SVN. Les déploiements de Capistrano fonctionnent bien.

Tout pointeur dans la bonne direction ou toute idée aiderait à réduire la quantité de boisson que je prévois de faire si je ne peux pas comprendre cela. (Chemins/IP brouillées, ne pas me pirater bro!)

set :application, "project1" 
set :user, "username" 
set :repository, "ssh://[email protected]/home/git/project1.git" 
set :branch, "master" 

set :port, 696969 

set :deploy_to, "/home/username/public_html/#{application}" 

set :scm, :git 

role :app, application      
role :web, application      
role :db, application, :primary => true 

# deployment via remote client (workstation) 
set :deploy_via, :copy 
set :runner, user 

# mod_rails 
namespace :deploy do 
    desc "Restarting mod_rails with restart.txt" 
    task :restart, :roles => :app, :except => { :no_release => true } do 
    run "touch #{current_path}/tmp/restart.txt" 
    end 

    [:start, :stop].each do |t| 
    desc "#{t} task is a no-op with mod_rails" 
    task t, :roles => :app do ; end 
    end 
end 

Ce fut le plus pertinent après (extrêmement pertinente même), mais je ne pouvais pas vraiment comprendre ce qu'ils disaient le correctif est. Je suis assez nouveau avec les config git/capistrano.

https://capistrano.lighthouseapp.com/projects/8716/tickets/56-query_revision-unable-to-resolve-revision-for-head-on-repository

Répondre

4

Ok il me semblait avoir fixé. Fondamentalement, comme j'ai 2 dépôts distincts sur le serveur distant, je pense que l'utilisateur "git" échouait parce que je n'avais pas enregistré une paire de clés ssh pour l'utilisateur git. Cela explique pourquoi l'un de mes scripts deploy.rb fonctionnait correctement, alors que celui-ci ne l'était pas.

Dans le lien que j'ai posté dans la question, l'un des commentateurs ont souligné la question:

https://capistrano.lighthouseapp.com/projects/8716/tickets/56-query%5Frevision-unable-to-resolve-revision-for-head-on-repository

Note this error is also displayed if you are using multiple github keys per http://capistrano.lighthouseapp .... and you do not have these keys and a corresponding entry in your .ssh/config on the workstation you're running the deploy from. so the ls-remote is run locally. is there a way to reference the repository at github.com for this request while the remote deploy uses [email protected]:user/project1.git

En outre, voir le lien suivant pour plus de détails, étant donné que toute la question ssh serait appliquer même si vous n'utilisez pas github.

http://github.com/guides/multiple-github-accounts

0

Pour moi Capistrano déploiements seulement avec Git semblent fonctionner lors de la mise set :copy_cache, true

1

poste de travail et votre serveur doit être en mesure d'atteindre le dépôt à l'adresse indiquée, sinon vous devrez peut-être pour définir: local_repository comment vous y accédez à partir de votre poste de travail, et: repository pour être comment vos serveurs devraient y accéder.

+0

Merci! Je ne savais pas que vous pouviez définir les deux variables, mais cela a fonctionné! – Andrew

0

J'ai seulement utilisé Capistrano avec git une fois, mais jamais utilisé ou vu l'utilisation de ssh: // dans la définition du dépôt.

Essayez d'utiliser à la place set :repository, "[email protected]/home/git/project1.git"

0

Assurez-vous que la branche que vous déployez à partir existe.

set :branch, "upgrade-to-2013.4.3" 

est pas égal à

set :branch, "upgrade-to-2013.3.4" 
Questions connexes