2014-01-24 54 views
7

我剛將Capistrano從v2升級到v3.1。Capistrano 3 - 錯誤:對不起,您必須有一個tty才能運行sudo

我重寫了我的任務,其中包括一個運行重新啓動NGINX的shell腳本的任務。要重新啓動NGINX我必須爲sudo這將導致錯誤運行:

Sorry, you must have a TTY to run sudo

在Capistrano的2,解決這個我添加到我的Capfile:

default_run_options[:pty] = true

什麼是等效Capistrano的V3 ?

deploy.rb文件看起來像這樣:

# config valid only for Capistrano 3.1 
lock '3.1.0' 

set :application, 'APP_NAME' 

namespace :deploy do 

    desc 'Restart NGINX' 
    task :restart do 

    on roles(:app), in: :sequence, wait: 5 do 
     execute :sudo, "./restart.sh" 
    end 
    end 

end 

回答

13

要解決這個問題,我需要添加set :pty, truedeploy.rb文件。我不得不在幾個地方找到這個答案,所以我想我會分享任何其他人有同樣的問題。

更新deploy.rb文件

# config valid only for Capistrano 3.1 
lock '3.1.0' 

set :application, 'APP_NAME' 
set :pty, true 

namespace :deploy do 

    desc 'Restart NGINX' 
    task :restart do 
    on roles(:app), in: :sequence, wait: 1 do 
     execute :sudo, "./restart.sh" 
    end 
    end 

end 

而不被提示輸入密碼連接,你需要設置SSH密鑰的。我production.rbstaging.rb是這個樣子:

set :stage, :production 

role :app, %{ec2-000-000-000-000.eu-west-1.compute.amazonaws.com} 

set :ssh_options, { 
    user: 'ubuntu', 
    keys: %w(/path/to/key/file/my_access_key.pem), 
    forward_agent: false 
} 
+0

我讀的地方([這裏](https://semaphoreapp.com/blog/2013/11/26/capistrano-3-upgrade-guide.html))在默認情況下,v3中':pty'是'true',但我在官方網站上找不到任何文檔...就像什麼都沒有。好工作找出一個;) – frhd

+0

乾杯 - 認爲它可能對某人有用:-) – ajtrichards

+0

@ajtrichards_wales但是,當你提示時,你如何提供密碼? – Mohamad

相關問題