Search code examples
ruby-on-railssshamazon-ec2capistranopuma

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,        '[email protected]: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 [email protected] 0.695s
          Uploading /tmp/git-ssh-myapp-production-adam.sh 100.0%
          02 chmod 700 /tmp/git-ssh-myapp-production-adam.sh
        ✔ 02 [email protected] 0.921s
    ** Execute git:check
    00:04 git:check
          01 git ls-remote --heads [email protected]:username/amharic-web.git
    cap aborted!
    SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: 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 [email protected]: 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 [email protected]
     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 [email protected]
     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 [email protected]:username/amharic-web.git as [email protected]
     DEBUG [4ce4f406] Command: ( export GIT_ASKPASS="/bin/echo" GIT_SSH="/tmp/git-ssh-myapp-production-adam.sh" ; /usr/bin/env git ls-remote --heads [email protected]:username/amharic-web.git )*

Solution

  • 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 (i.e. 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 [email protected] git ls-remote --heads [email protected]:username/amharic-web.git