Rails 4 + Capistrano 3 : fatal: Could not read from remote repository while deploying

心不动则不痛 提交于 2019-12-20 10:36:39

问题


I am getting following error while deploying Rails 4 application using Capistrano 3

INFO [87512eb8] Running /usr/bin/env chmod +x /tmp/magnificent/git-ssh.sh as deploy@104.236.6.180
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 git@github.com:BoTreeConsultingTeam/magnificent.git as deploy@104.236.6.180
DEBUG [1ec94dd1] Command: ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/magnificent/git-ssh.sh /usr/bin/env git ls-remote --heads git@github.com: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.

Here is capistrano configuration.

config/deploy.rb

# config valid only for current version of Capistrano
lock '3.4.0'

set :application, 'magnificent'
set :repo_url, 'git@github.com: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'

I also copied /home/deploy/.ssh/id_rsa.pub of remote server to github deploy keys.

UPDATE I confirm that I am able to access remote repo and also GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/magnificent/git-ssh.sh /usr/bin/env git ls-remote --heads git@github.com:BoTreeConsultingTeam/magnificent.git command works on remote server.


回答1:


Current Solution

Lately I use different solution. Before cap production deploy I run following commands.

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

Previous Solution

I am able to fix this issue by replacing

set :repo_url, 'git@github.com:BoTreeConsultingTeam/magnificent.git'

with

set :repo_url, 'https://my_github_username:my_github_password@github.com/BoTreeConsultingTeam/magnificent'

Note if your password contains special characters then thet should be url encoded. You can quickly encode using URI::encode in irb.

With other deployments using Capistrano 2, I never need to supply github credentials.

Can anybody please tell why should I have to specify git username/password in repo_url?

There is one more solution in the upcase forum post which also worked.




回答2:


I had this problem too. Turns out I had loaded the wrong SSH key and it interfered with the deployment. Solved it by removing the wrong loaded ssh key like so:

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

and then running the Capistrano deployment again.




回答3:


I had similar problem(ubuntu). ssh-agent should be on. You can add it to startup applications.




回答4:


This could also happen if you are deploying to the server for the first time, and the git server is not in the known host list of your deployment server.

so, logging into the remote server and then doing a git request to the repository will cause the git server to be added to the known host list.

like so:

git ls-remote git@bitbucket.org:your_gitbucket_user_id/your_repo.git master

The authenticity of host 'bitbucket.org (104.192.143.2)' can't be established.
RSA key fingerprint is SHA256:zzXQOXSRBEiUtuE8AikJYKwbHaxvSc0ojabwzha.
Are you sure you want to continue connecting (yes/no)? yes

you should confirm to connect.

Warning: Permanently added 'bitbucket.org,104.192.143.2' (RSA) to the list of known hosts.

Now try deploying using the capistrano task.

cap production deploy


来源:https://stackoverflow.com/questions/31855914/rails-4-capistrano-3-fatal-could-not-read-from-remote-repository-while-depl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!