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.
-
eval "$(ssh-agent -s)"
-
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ó.