2009-12-23 10 views
5

He buscado todos los problemas relevantes de Capistrano, pero no he podido encontrar algo que haya elucidado nada aquí para mí.Capistrano y Git, arruinando mi vida. "No se puede resolver la revisión de [HEAD] en el repositorio ..."

git version 1.6.4.2 
Capistrano v2.5.10 

Básicamente, cuando ejecuto mi script casquillo deploy.rb, se conecta al servidor, comienza la ejecución del despliegue: tarea de actualización, a continuación, en el despliegue: tarea update_code:

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

falla con el siguiente error:

/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) 

Aquí está mi script deploy, lo he intentado y omitiendo incluyendo:

conjunto: rama 'master'

También pensé que mi camino al repositorio estaba apagado, pero he probado casi todas las permutaciones (absoluta, no absoluta, sufijo .git, sin sufijo). Definitivamente hay un repositorio de git al descubierto en el camino que estoy señalando.

** Tengo varios proyectos alojados en una porción. Los otros proyectos también son un proyecto de rieles, pero se está ejecutando SVN. Las implementaciones de Capistrano funcionan bien.

Cualquier sugerencia en la dirección correcta o cualquier idea ayudaría a reducir la cantidad de bebida que planeo hacer si no puedo resolver esto. (Caminos/IPS ofuscado, no te hackeo yo 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 

Este fue el mensaje más relevante (extremadamente relevante, incluso), pero realmente no pude averiguar lo que estaban diciendo la solución es. Soy bastante nuevo con las configuraciones de git/capistrano.

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

Respuesta

4

Ok me parecía haber arreglado.

Básicamente, dado que tengo 2 repositorios separados en el servidor remoto, creo que el usuario "git" estaba fallando porque no había registrado un par de claves ssh para el usuario de git. Eso explica por qué uno de mis scripts deploy.rb funcionaba correctamente, mientras que este no.

En el enlace que he publicado en la pregunta, uno de los comentaristas señalaron el problema:

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

También, ver el siguiente enlace para más detalles, ya que todo el tema ssh haría aplicar incluso si no está usando github.

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

0

Para mí Capistrano implementaciones con Git parece que sólo funciona cuando se ajusta set :copy_cache, true

1

Tanto la estación de trabajo y el servidor debe ser capaz de alcanzar el repositorio en la dirección especificada, si no, entonces es posible que tenga para establecer: local_repository a cómo accede desde su workstaion, y: repositorio a cómo deben acceder sus servidores.

+0

Gracias! No sabía que podía establecer ambas variables, ¡pero funcionó! – Andrew

0

Solo he usado capistrano con git una vez, pero nunca he usado o visto el uso de ssh: // en la definición del repositorio.

Intente utilizar set :repository, "[email protected]/home/git/project1.git" lugar

0

Asegúrese de que la rama se va a implementar a partir existe. que

set :branch, "upgrade-to-2013.4.3" 

no es igual a

set :branch, "upgrade-to-2013.3.4" 
Cuestiones relacionadas