2012-05-16 103 views
14

爲什麼我在嘗試運行部署安裝時遇到失敗?我使用ssh作爲我的密碼。我是否需要更改database.yml或deploy.rb中的任何內容。它們列在下面。Capistrano Deploy - Net :: SSH :: AuthenticationFailed - AWS EC2

$ cap deploy:setup 
    * executing `deploy:setup' 
    * executing "sudo -p 'sudo password: ' mkdir -p /var/www/apps/sample_app /var/www/apps/sample_app 
/releases /var/www/apps/sample_app/shared /var/www/apps/sample_app/shared/system /var/www  
/apps/sample_app/shared/log /var/www/apps/sample_app/shared/pids" 
    servers: ["ec2-20-21-42-51.compute-1.amazonaws.com"] 
Password: 
connection failed for: ec2-20-21-42-51.compute-1.amazonaws.com 
(Net::SSH::AuthenticationFailed: ubuntu) 

deploy.rb

# The name of your app 
set :application, "sample_app" 

# The directory on the EC2 node that will be deployed to 
set :deploy_to, "/var/www/apps/#{application}" 

set :keep_releases, 3 

# deploy with git 
set :scm, :git 
set :repository, "[email protected]:username/sample_app.git" 
set :git_shallow_clone, 1 
set :branch, "master" 
set :use_sudo, true 

set :user, "ubuntu" 
ssh_options[:forward_agent] = true 
default_run_options[:pty] = true 

# The address of the remote host on EC2 (the Public DNS address) 
set :location, "ec2-20-21-42-51.compute-1.amazonaws.com" 

# setup some Capistrano roles 
role :app, location 
role :web, location 
role :db, location, :primary => true 

after 'deploy:update_code', 'deploy:symlink_db' 


namespace :deploy do 

desc "Restart Application" 
task :restart, :roles => :app do 
run "touch #{deploy_to}/#{shared_dir}/tmp/restart.txt" 
end 

desc "Symlinks the database.yml" 
task :symlink_db, :roles => :app do 
run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml" 
end 

end 

的database.yml

development: 
    adapter: mysql2 
    database: db/development.mysql2 
    pool: 5 
    timeout: 5000 
    database: sample_app 
    username: root 
    socket: /tmp/mysql.sock 

test: 
    adapter: mysql2 
    database: db/test.mysql2 
    pool: 5 
    timeout: 5000 
    database: sample_app 
    username: root 
    socket: /tmp/mysql.sock 

production: 
    adapter: mysql2 
    database: db/production.mysql2 
    pool: 5 
    timeout: 5000 
    database: sample_app 
    username: ubuntu 
    socket: /var/run/mysqld/mysqld.sock 

回答

15

對於Capistrano的V2

指定您的PEM文件的位置

ssh_options[:keys] = ["/where/ever/it/is/key.pem"] 

For Capistrano v3 ssh_options稍有變化,但基本設置幾乎相同。

set :ssh_options, { 
    keys: %w(/where/ever/it/is/key.pem), 
    forward_agent: false, 
    user: 'ubuntu' 
} 
+3

當幾個開發人員部署時,我們應該如何處理? – juanpastas

+1

'ssh_options [:keys] = [File.join(ENV [「HOME」],「/.ssh/key.pem」)]' –

0

你有 「命令」 的權利? sudo組中的用戶是「ubuntu」嗎?

+0

我不得不添加ssh_options [:鍵] = [ 「/Users/Victoria/Documents/ServerKeys/key.pem」]我deploy.rb文件 – SilverNightaFall

+0

如果你可以使用 「命令」 的權限,則必須允許它爲你的用戶(Ubuntu的)。問題不在於capistrano或RoR應用程序。如果你不需要「sudo」,你可以設置:use_sudo false。 我的ubuntu用戶設置: sudo:x:27:oliver,deployer,michal – quatermain

0

部署到ec2實例時,您將不具有ubuntu用戶的sudo權限。

更改此:

set :use_sudo, true

要這樣:

set :use_sudo, false

相關問題