0

this is my first attempt to deploy a Rails app using Capistrano. I am following the tutorial at https://ogdenstudios.xyz/blog/how-do-i-deploy-a-rails-6-app-to-amazon-ec-2/ to deploy to an AWS EC2 instance. My app is on Rails 6 and runs smoothly on localhost. I followed the tutorial but I am stock in the final step, when i run cap production deploy y get the following error:

00:00 rbenv:validate
      rbenv: rbenv_ruby is not set; ruby version will be defined by the remote hosts via rbenv
00:00 git:wrapper
      01 mkdir -p /tmp
#<Thread:0x00007fd74423aa28 /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    12: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
    11: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/abstract.rb:31:in `run'
    10: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/abstract.rb:31:in `instance_exec'
     9: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/capistrano-3.14.1/lib/capistrano/scm/tasks/git.rake:8:in `block (3 levels) in eval_rakefile'
     8: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/abstract.rb:80:in `execute'
     7: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/abstract.rb:148:in `create_command_and_execute'
     6: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/abstract.rb:148:in `tap'
     5: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/abstract.rb:148:in `block in create_command_and_execute'
     4: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/netssh.rb:130:in `execute_command'
     3: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/netssh.rb:177:in `with_ssh'
     2: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/connection_pool.rb:63:in `with'
     1: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/backends/connection_pool.rb:63:in `call'
/Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/net-ssh-6.1.0/lib/net/ssh.rb:268:in `start': Authentication failed for user ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com (Net::SSH::AuthenticationFailed)
    1: from /Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
/Users/bobsled/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com: Authentication failed for user ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com (SSHKit::Runner::ExecuteError)
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com: Authentication failed for user ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com


Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com

Tasks: TOP => deploy:check => git:check => git:wrapper
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com: Authentication failed for user ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com


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


  INFO [7f1cf201] Running /usr/bin/env mkdir -p /tmp as ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com

 DEBUG [7f1cf201] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="" ; /usr/bin/env mkdir -p /tmp )

  INFO ---------------------------------------------------------------------------

  INFO START 2020-08-07 13:31:07 -0500 cap production deploy

  INFO ---------------------------------------------------------------------------

  INFO rbenv: rbenv_ruby is not set; ruby version will be defined by the remote hosts via rbenv

  INFO [0bfcc93b] Running /usr/bin/env mkdir -p /tmp as ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com

 DEBUG [0bfcc93b] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="" ; /usr/bin/env mkdir -p /tmp )

  INFO ---------------------------------------------------------------------------

  INFO START 2020-08-07 13:50:22 -0500 cap production deploy

  INFO ---------------------------------------------------------------------------

  INFO rbenv: rbenv_ruby is not set; ruby version will be defined by the remote hosts via rbenv

  INFO [cb1eb774] Running /usr/bin/env mkdir -p /tmp as ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com

 DEBUG [cb1eb774] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="" ; /usr/bin/env mkdir -p /tmp )

  INFO ---------------------------------------------------------------------------

  INFO START 2020-08-07 14:09:05 -0500 cap production deploy

  INFO ---------------------------------------------------------------------------

  INFO rbenv: rbenv_ruby is not set; ruby version will be defined by the remote hosts via rbenv

  INFO [86bd8328] Running /usr/bin/env mkdir -p /tmp as ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com

 DEBUG [86bd8328] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="" ; /usr/bin/env mkdir -p /tmp )

I am adding my deploy.rb file

# config valid for current version and patch releases of Capistrano
lock "~> 3.14.1"

set :application, "lantiamaster"
set :repo_url, "git@github.com:Robs-v82/lantiamaster.git"

# Default branch is :master
# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp

# Default deploy_to directory is /var/www/my_app_name
set :deploy_to, "/home/ubuntu/lantiamaster"

set :use_sudo, true

set :branch, 'master'

# Default value for :format is :airbrussh.
# set :format, :airbrussh

# You can configure the Airbrussh format using :format_options.
# These are the defaults.
# set :format_options, command_output: true, log_file: "log/capistrano.log", color: :auto, truncate: :auto

# Default value for :pty is false
set :pty, true

set :ssh_options, {
  forward_agent: true,
  user: fetch(:user),
  # auth_methods: %w[publickey],
  keys: %w[~/server-keys/lantiamaster-key-pair.pem]
}

# Default value for :linked_files is []
# append :linked_files, "config/database.yml"
set :linked_files, %w{config/master.key}

# Default value for linked_dirs is []
# append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system"
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')

# Default value for default_env is {}
# set :default_env, { path: "/opt/ruby/bin:$PATH" }

# Default value for local_user is ENV['USER']
# set :local_user, -> { `git config user.name`.chomp }

# Default value for keep_releases is 5
# set :keep_releases, 5

# Uncomment the following to require manually verifying the host key before first deploy.
# set :ssh_options, verify_host_key: :secure

I am new to deployment and I have no clue about what the problem could be. I created SSH keys, which I saved in both, my ubuntu virtual machine, and my Github account.

  • Have you tried ssh manually with this info `ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com:` and it success? – Ninh Le Aug 07 '20 at 23:21
  • I am not sure I understand. if you mean to start my EC2 instance typing those credentials (instead of the "easy access" described in step 6 of the tutorial), I just tried it. I still get the same error. – Roberto Valladares Piedras Aug 07 '20 at 23:51
  • if you own aws account let open ec2 tab, choose the right ec2 and click connect, it will so you step. – Ninh Le Aug 07 '20 at 23:53

1 Answers1

0

AWS ec2 instance require pem key to connect to it, so you must tell capistrano what key is use, I think you need add this config to your deploy file:

set :ssh_options, { forward_agent: true, user: fetch(:user), keys: path_to_pem_key }
Ninh Le
  • 1,291
  • 7
  • 13
  • I edited deploy.rb, same outcome, I am also adding the deploy file to the question, in case it helps. – Roberto Valladares Piedras Aug 08 '20 at 00:15
  • Sorry, my mistake, this just applies for the default user of instance, first please help me check if you can ssh manually from your deploy device to the remote server, if you getting errors, you can post it here, it helps me identify your problem, ssh command I guess is `ssh -i ~/server-keys/lantiamaster-key-pair.pem ubuntu@ec2-13-59-204-151.us-east-2.compute.amazonaws.com` – Ninh Le Aug 08 '20 at 00:48
  • before that you need set permission for pem key `chmod 400 ~/server-keys/lantiamaster-key-pair.pem` – Ninh Le Aug 08 '20 at 00:57
  • Yes, I had already installed the pem file and run chmod 400. I can ssh manually from my terminal. No errors. – Roberto Valladares Piedras Aug 08 '20 at 01:50
  • I found this [question](https://stackoverflow.com/questions/12967918/deploy-with-capistrano-using-a-pem-file) may relate to your problem – Ninh Le Aug 08 '20 at 02:04
  • @RobertoValladaresPiedras I have reproduced your problem and from your deploy.rb file I found that problem here is the path to pem key must a absolute path, for example in my case `/home/le.van.ninh/Downloads/ubuntu.pem` – Ninh Le Aug 08 '20 at 02:29
  • Yes, I think that's it! In my case the problem was in the path, but not in the deploy.rb but in config/deploy/production.rb where I was missing "~" at the beginning. Thanks a lot for your help! – Roberto Valladares Piedras Aug 08 '20 at 02:58