运行deploy时出现身份验证错误:check

时间:2014-09-04 18:37:30

标签: ruby-on-rails ssh capistrano capistrano3

我尝试使用Capistrano部署Rails应用。我按照教程How to Deploy a Rails 4 App with Git and Capistrano进行了操作。但是,当我运行cap production deploy:check时,它会给我这个错误:

INFO[349a4b8d] Running /usr/bin/env mkdir -p /tmp/app_name/ on xxx.xx.xxx.xxx
DEBUG[349a4b8d] Command: /usr/bin/env mkdir -p /tmp/app_name/
INFO[cd49f0ac] Running /usr/bin/env mkdir -p /tmp/app_name/ on example.com
DEBUG[cd49f0ac] Command: /usr/bin/env mkdir -p /tmp/app_name/
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host xxx.xx.xxx.xxx: Authentication failed for user @xxx.xx.xxx.xxx

我的第一个想法是我确实需要使用sudo,但是mkdir不应该在/ tmp /中使用sudo。我的第二个想法是它需要ssh的密码,但我使用公钥在我的开发计算机和服务器之间进行ssh。有什么想法吗?

这是我的config/deploy.rb

lock '3.2.1'

set :application, 'app_name'

set :repo_url, 'git@example.com:remote/app_name.git'
set :scm, :git

set :user, 'deploy'
set :use_sudo, false

set :stage, :production

set :rails_env, 'production'
set :deploy_via, :remote_cache

set :keep_releases, 5

set :ssh_options, { forward_agent: true }

set :pty, true

server 'xxx.xx.xxx.xxx', roles: [:app, :web, :db], primary: true

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      # execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing, :restart

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      # within release_path do
      #   execute :rake, 'cache:clear'
      # end
    end
  end

end

我使用Ruby 2.1.0,Rails 4.1.4和Capistrano 3.2.1。

1 个答案:

答案 0 :(得分:2)

我发现我的设置有些问题。首先,我忘了填写config/deploy/production.rb中的任何信息。在同一个文件中,我还添加了行set :password, ask('Server password:', nil)

其次,我之所以遇到此错误是因为权限问题。显然,该用户无权修改/var/www。要改变这种情况,我只需输入sudo chown deploy:deployers /var/www。此外,我需要在服务器上包含GitHub的登录凭据。