简体   繁体   中英

Capistrano deploy failing on git:check

Trying to deploy a Rails app on an EC2 instance with Puma/Nginx/Capistrano. I was following this tutorial.

This is my first deploy, not sure what exactly is going on. Seems like there is an issue with my ssh configuration, judging from the console output, but what exactly I'm really not sure any help would be greatly appreciated.

Here's the deploy.rb

server '52.206.222.73', roles: %w{web app db}, primary: true

set :repo_url,        'git@example.com:username/myapp.git'
set :application,     'myapp'
set :user,            'deploy'
set :puma_threads,    [4, 16] 
set :puma_workers,    0   

# Don't change these unless you know what you're doing
set :pty,             true
set :use_sudo,        false
set :stage,           :production
set :deploy_via,      :remote_cache
set :deploy_to,       "/home/#{fetch(:user)}/#{fetch(:application)}"
set :puma_bind,       "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock"
set :puma_state,      "#{shared_path}/tmp/pids/puma.state"
set :puma_pid,        "#{shared_path}/tmp/pids/puma.pid"
set :puma_access_log, "#{release_path}/log/puma.error.log"
set :puma_error_log,  "#{release_path}/log/puma.access.log"
set :ssh_options,     { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub) }
set :puma_preload_app, true
set :puma_worker_timeout, nil 
set :puma_init_active_record, true  # Change to false when not using ActiveRecord

## Defaults:
# set :scm,           :git
# set :branch,        :master
# set :format,        :pretty
# set :log_level,     :debug
# set :keep_releases, 5

## Linked Files & Directories (Default None):
# set :linked_files, %w{config/database.yml}
# set :linked_dirs,  %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

namespace :puma do
  desc 'Create Directories for Puma Pids and Socket'
  task :make_dirs do
    on roles(:app) do
      execute "mkdir #{shared_path}/tmp/sockets -p"
      execute "mkdir #{shared_path}/tmp/pids -p"
    end 
  end   

And output from cap production deploy --trace

** Execute git:wrapper
    00:00 git:wrapper
          01 mkdir -p /tmp
        ✔ 01 deploy@52.206.222.73 0.695s
          Uploading /tmp/git-ssh-myapp-production-adam.sh 100.0%
          02 chmod 700 /tmp/git-ssh-myapp-production-adam.sh
        ✔ 02 deploy@52.206.222.73 0.921s
    ** Execute git:check
    00:04 git:check
          01 git ls-remote --heads git@example.com:username/amharic-web.git
    cap aborted!
    SSHKit::Runner::ExecuteError: Exception while executing as deploy@52.206.222.73: git exit status: 128
    git stdout: Nothing written
    git stderr: Nothing written
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
    SSHKit::Command::Failed: git exit status: 128
    git stdout: Nothing written
    git stderr: Nothing written
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/command.rb:100:in `exit_status='
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/netssh.rb:148:in `execute_command'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:141:in `block in create_command_and_execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:141:in `tap'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:141:in `create_command_and_execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:74:in `execute'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/git.rb:10:in `git'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/git.rb:20:in `check'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/tasks/git.rake:34:in `block (4 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:93:in `with'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/capistrano-3.6.0/lib/capistrano/tasks/git.rake:33:in `block (3 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:29:in `instance_exec'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/backends/abstract.rb:29:in `run'
    /Users/adam/.rvm/gems/ruby-2.3.0/gems/sshkit-1.11.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
    Tasks: TOP => git:check
    The deploy has failed with an error: Exception while executing as deploy@52.206.222.73: git exit status: 128
    git stdout: Nothing written
    git stderr: Nothing written
    ** Invoke deploy:failed (first_time)
    ** Execute deploy:failed

    ** DEPLOY FAILED
    ** Refer to log/capistrano.log for details. Here are the last 20 lines:

     DEBUG [34726536]   -
     DEBUG [34726536]   .
     DEBUG [34726536]   |
     DEBUG [34726536]   /
     DEBUG [34726536]   -
     DEBUG [34726536]   \
     DEBUG [34726536]   .\
     DEBUG [34726536]   .
     DEBUG [34726536]   ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
     DEBUG [34726536] Finished in 1.755 seconds with exit status 0 (successful).
      INFO [2219decf] Running /usr/bin/env mkdir -p /tmp as deploy@52.206.222.73
     DEBUG [2219decf] Command: /usr/bin/env mkdir -p /tmp
      INFO [2219decf] Finished in 0.695 seconds with exit status 0 (successful).
     DEBUG Uploading /tmp/git-ssh-myapp-production-adam.sh 0.0%
      INFO Uploading /tmp/git-ssh-myapp-production-adam.sh 100.0%
      INFO [38c56cdb] Running /usr/bin/env chmod 700 /tmp/git-ssh-myapp-production-adam.sh as deploy@52.206.222.73
     DEBUG [38c56cdb] Command: /usr/bin/env chmod 700 /tmp/git-ssh-myapp-production-adam.sh
      INFO [38c56cdb] Finished in 0.921 seconds with exit status 0 (successful).
      INFO [4ce4f406] Running /usr/bin/env git ls-remote --heads git@example.com:username/amharic-web.git as deploy@52.206.222.73
     DEBUG [4ce4f406] Command: ( export GIT_ASKPASS="/bin/echo" GIT_SSH="/tmp/git-ssh-myapp-production-adam.sh" ; /usr/bin/env git ls-remote --heads git@example.com:username/amharic-web.git )*

Run these 2 commands to grant git access via your system

eval ssh-agent
ssh-add ~/.ssh/id_rsa

These commands are assuming that you have ssh key over the remote git server(bitbucket/github/other)

I'm surprised there isn't a more descriptive error message from Git. However, the git ls-remote command is failing for some reason. In absence of any error message, the best guess is that Git cannot access the remote repository.

This could be because:

  • The Git repository URL you've provided is incorrect (double check there are no typos); or
  • Your SSH agent is not being forwarded; or
  • Your SSH identity is not allowed to access the specified repository

On your local machine (ie where you ran the cap command), try manually running the same Git command via SSH and see what happens:

ssh -A -i ~/.ssh/id_rsa.pub deploy@52.206.222.73 git ls-remote --heads git@example.com:username/amharic-web.git

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM