2014-09-04 49 views
0

我正在嘗試使用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 /須藤。我的第二個想法是它需要ssh的密碼,但我使用公鑰在開發計算機和服務器之間使用ssh。有任何想法嗎?

這裏是我的config/deploy.rb

lock '3.2.1' 

set :application, 'app_name' 

set :repo_url, '[email protected]: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和3.2.1 Capistrano的。

回答

2

我發現我的設置有一些錯誤。首先,我忘記填寫config/deploy/production.rb中的任何信息。在這個文件中,我還添加了行set :password, ask('Server password:', nil)

其次,我之所以出現此錯誤是因爲權限問題。顯然這個用戶沒有權限修改/var/www。爲了改變這種情況,我只是輸入了sudo chown deploy:deployers /var/www。另外,我需要在服務器上包含GitHub的登錄憑證。