GitHub Despliega vía Capistrano. Public Repo y SSH funciona, pero Private no

En serio necesito tu ayuda. Tengo una aplicación Ruby on Rails en mi máquina local, un repository en GitHub y un server Ubuntu, que aloja la aplicación con Nginx.

Tuve mi repo durante mucho time en público y el deployment a través de capistrano funcionó bien. Ahora convertí mi repo a uno privado y la implementación simplemente no funciona. Cuando bash implementarlo, aparece el siguiente error:

* executing `deploy' * executing `deploy:update' ** transaction: start * executing `deploy:update_code' updating the cached checkout on all servers executing locally: "git ls-remote git://github.com/GIT_USER/APPLICATION.git master" fatal: The remote end hung up unexpectedly *** [deploy:update_code] rolling back * executing "rm -rf /var/www/APPLICATION/releases/DATE_OF_DEPLOY; true" servers: ["DOMAIN"] [DOMAIN] executing command command finished in 424ms 

Entonces, supongo que la authentication no funciona, pero lo hace. Copié mi key pública a GitHub y puedo incluso SSH allí. Puedo SSH desde el server a GitHub y dice que estoy autenticado con éxito. Incluso puedo ver qué tecla funciona. Pero "git ls-remote […]" no funciona y no tengo información ejecutándolo con trace, además de la información que ya obtuve.

Entonces, mi principal problema es que no puedo search el error. Si sabes cómo resolver esto o puedes apuntar en cualquier dirección, sería bueno.

Y esta es la parte principal de mi deploy.rb:

 $:.unshift(File.expand_path('./lib', ENV['rvm_path'])) require "rvm/capistrano" require 'bundler/capistrano' default_run_options[:pty] = true set :user, "DEPLOY_USER" set :domain, "DOMAIN" set :application, "APPLICATION" set :repository, "git@github.com:GIT_USER/APPLICATION.git" set :deploy_to, "/var/www/#{application}" set :deploy_via, :remote_cache set :scm, :git set :git_account, "GIT_USER" set :branch, "master" set :git_shallow_clone, 1 set :scm_verbose, true set :use_sudo, false set :rvm_bin_path, "/usr/local/rvm/bin" set :rvm_ruby_string, '1.9.2' set :rvm_type, :user # Don't use system-wide RVM ssh_options[:port] = PORT_NUMBER set :user, user ssh_options[:keys] = %w(/home/DEPLOY_USER/.ssh/id_rsa) set :ssh_options, { :forward_agent => true} server domain, :app, :web # Your HTTP server, Apache/etc role :web, domain # This may be the same as your `Web` server role :app, domain # This is where Rails migrations will run role :db, domain, :primary => true 

Lamento que esto parezca tan desorderado, pero lo intenté como mil sugerencias, consejos y tutoriales.

Gracias por cada ayuda!

Y por cierto: sí, todas las cosas escritas en Capslock son solo por razones de privacidad y, por supuesto, no son las configuraciones reales que uso.

Dado que ahora este es un repository no público, debe usar git @ … address.

Veo que tiene esto en su file deploy.rb, pero ls-remote todavía se ejecuta en git: // …

El problema puede ser una copy en caching del repository que tienes en un server. Verifica si tienes una dirección de origen correcta en el file shanetworking / cached-copy / .git / config. Deberías tener git @ … en lugar de git: // … there

Me parece recordar haber tenido un problema similar con la implementación usando un repository privado de github. No creo que hayamos averiguado la causa del problema, pero al final creo que hemos resuelto el problema usando ssh-add para agregar la key github a ssh-agent, podría valer la pena intentarlo

para repositorys privados, debe usar el estilo https:

 set :repository, "https://github.com/git_name/repo_name.git" 

¡pero tienes que escribir tu nombre de usuario y contraseña dos veces en cada implementación! entonces escribo un pequeño script de Expect para hacer eso por mí

echa un vistazo a esta esencia

.. o como un tutorial:

1 – crea un file en tu directory personal ($ cat> ~ / git_cap)

 #!/usr/bin/expect -f # Expect script to supply username/password to cap deploy to git private repository # This script needs username and password as arguments to connect to git server: # ------------------------------------------------------------------------ # ./git_cap gituser gitpwd # ------------------------------------------------------------------------- # set Variables set g_user [lrange $argv 0 0] set g_pwd [lrange $argv 1 1] set timeout -1 spawn cap deploy match_max 100000 # Look for user prompt expect "*?sername:*" send -- "$g_user\r" send -- "\r" # Look for passwod prompt expect "*?assword:*" send -- "$g_pwd\r" send -- "\r" # Look for user prompt expect "*?sername:*" send -- "$g_user\r" send -- "\r" # Look for passwod prompt expect "*?assword:*" send -- "$g_pwd\r" send -- "\r" expect eof 

2 – hazlo ejecutable

 $ chmod 755 ~/git_cap $ chmod +x ~/git_cap 

3 – agrega un alias en tu .profile / .bashrc .. (opcional)

 alias gcap='~/git_cap gitname gitpwd' 

4 – agregue su sudo-pwd a deploy.rb o extienda el script expect para sudo-pwd

(Por esa razón, el nombre de usuario y la contraseña se esperan 2 veces, incluso si es posible utilizarla más veces … pero de esta manera puede agregar una línea para la contraseña con exp_continue para que cada contraseña envíe el sudo-pwd y no su git- pwd)

5 – implementar con gcap

 rails_root$ gcap