rails deploy ruby-on-rails github deployment digital-ocean capistrano3

ruby-on-rails - deploy - capistrano rails



Rails 4+Capistrano 3: fatal: no se pudo leer desde el repositorio remoto durante la implementación (3)

Tuve un problema similar (ubuntu). ssh-agent debería estar encendido. Puede agregarlo a las aplicaciones de inicio.

Recibo un error de seguimiento al implementar la aplicación Rails 4 con Capistrano 3

INFO [87512eb8] Running /usr/bin/env chmod +x /tmp/magnificent/git-ssh.sh as [email protected] DEBUG [87512eb8] Command: /usr/bin/env chmod +x /tmp/magnificent/git-ssh.sh INFO [87512eb8] Finished in 0.444 seconds with exit status 0 (successful). INFO [1ec94dd1] Running /usr/bin/env git ls-remote --heads [email protected]:BoTreeConsultingTeam/magnificent.git as [email protected] DEBUG [1ec94dd1] Command: ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/magnificent/git-ssh.sh /usr/bin/env git ls-remote --heads [email protected]:BoTreeConsultingTeam/magnificent.git ) DEBUG [1ec94dd1] ERROR: Repository not found. DEBUG [1ec94dd1] fatal: Could not read from remote repository. DEBUG [1ec94dd1] DEBUG [1ec94dd1] Please make sure you have the correct access rights DEBUG [1ec94dd1] and the repository exists.

Aquí está la configuración capistrano.

config / deploy.rb

# config valid only for current version of Capistrano lock ''3.4.0'' set :application, ''magnificent'' set :repo_url, ''[email protected]:BoTreeConsultingTeam/magnificent.git'' set :deploy_to, ''/home/deploy/magnificent'' set :linked_files, %w{config/database.yml config/secrets.yml} set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} set :branch, ''develop'' #set/ :branch,`git rev-parse --abbrev-ref HEAD`.chomp set :ssh_options, { forward_agent: true } namespace :deploy do desc ''Restart application'' task :restart do on roles(:app), in: :sequence, wait: 5 do execute :touch, release_path.join(''tmp/restart.txt'') end end after :publishing, ''deploy:restart'' after :finishing, ''deploy:cleanup'' end namespace :deploy do after :restart, :clear_cache do on roles(:web), in: :groups, limit: 3, wait: 10 do # Here we can do anything such as: # within release_path do # execute :rake, ''cache:clear'' # end end end end

production.rb

set :stage, :production server ''xx.xx.xx.xx'', user: ''deploy'', roles: %w{web app}

Capfile

require ''capistrano/setup'' require ''capistrano/deploy'' require ''capistrano/rvm'' require ''capistrano/bundler'' require ''capistrano/rails'' require ''capistrano/rails/assets'' require ''capistrano/rails/migrations'' Dir.glob(''lib/capistrano/tasks/*.rake'').each { |r| import r } set :rvm_type, :user set :rvm_ruby_version, ''2.2.2''

También copié /home/deploy/.ssh/id_rsa.pub del servidor remoto a las claves de despliegue de github.

ACTUALIZACIÓN Confirmo que puedo acceder al repositorio remoto y también a GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/magnificent/git-ssh.sh /usr/bin/env git ls-remote --heads [email protected]:BoTreeConsultingTeam/magnificent.git comando GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/magnificent/git-ssh.sh /usr/bin/env git ls-remote --heads [email protected]:BoTreeConsultingTeam/magnificent.git funciona en el servidor remoto.


También tuve este problema. Resulta que había cargado la clave SSH incorrecta e interfería con la implementación. Lo resolvió quitando la clave ssh cargada incorrectamente así:

ssh-add -d ~/.ssh/wrong-ssh-key

y luego ejecutar el despliegue de Capistrano nuevamente.


Solución actual

Últimamente uso una solución diferente. Antes de cap production deploy , ejecuto los siguientes comandos.

  1. eval "$(ssh-agent -s)"
  2. ssh-add ~/.ssh/id_rsa

Solución anterior

Puedo solucionar este problema reemplazando

set :repo_url, ''[email protected]:BoTreeConsultingTeam/magnificent.git''

con

set :repo_url, ''https://my_github_username:[email protected]/BoTreeConsultingTeam/magnificent''

Tenga en cuenta que si su contraseña contiene caracteres especiales, entonces debe codificarse en url. Puede codificar rápidamente usando URI::encode en irb.

Con otras implementaciones usando Capistrano 2, nunca es necesario que proporcione las credenciales de Github.

¿Alguien puede decir por qué debería especificar git username / password en repo_url ?

Hay una solución más en la publicación del foro de upcase que también funcionó.