I'm trying to setup deployment to an AWS EC2 instance, using capistrano. In order to test, I'm using
cap testing deploy:check
but Capistrano fails with:
triggering load callbacks
* 2013-03-12 15:41:27 executing `testing'
triggering start callbacks for `deploy:check'
* 2013-03-12 15:41:27 executing `multistage:ensure'
* 2013-03-12 15:41:27 executing `deploy:check'
* executing "test -d /......./releases"
servers: ["ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com"]
connection failed for: ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
(NoMethodError: undefined method `each' for "publickey":String)
I'm using my .pem file to connect, and the deploy.rb script looks as follows:
set :stages, %w(production testing)
set :default_stage, 'testing'
require 'capistrano/ext/multistage'
set :application, 'app_name'
set :user, 'the_user'
set :group, 'the_group'
set :scm, :git
set :repository, "git@github.com:......./#{application}.git"
set :deploy_to, '/......./'
set :deploy_via, :remote_cache
# Authentication setup
default_run_options[:pty] = true
ssh_options[:forward_agent] = true
ssh_options[:auth_methods] = 'publickey'
ssh_options[:keys] = ['~/........pem']
Any idea why this is happening?
Try putting your public key on the server.
And remove
ssh_options[:auth_methods] = 'publickey'
ssh_options[:keys] = ['~/........pem']
It should work
Remove the line
I recently upgraded a development server and saw the same behavior. The error message looks as though Capistrano is expecting an iterable and the assignment for
publicKey
isn't defining it as such.As trivial as it may sound, try changing:
to:
You may need to do the same for the other items in your authentication setup. Good luck.