2012-05-25 39 views
7

我不希望對通過Capistrano執行的任何遠程執行的命令使用sudo。具體來說,當我運行cap deploy:setup時,我會在第一個mkdir命令期間詢問我的sudo密碼。我在我的deploy.rb文件中添加了set :use_sudo, false,但這沒有什麼區別。卡皮斯特拉諾使用sudo即使使用「set:use_sudo,false」

我開始時使用了一個相當完整的deploy.rb文件,但是一旦我開始出現問題,就會削減它。這是我最小的版本仍顯示use_sudo不受尊重:

# App Definitions 

set :domain, '[server-ip]' 
role :app, domain 
role :web, domain 
role :db, domain, :primary => true 

set :user, "my_app" 
set :use_sudo, false 

task :sudo_test do 
    run "#{try_sudo} whoami" 
end 

運行cap sudo_test結果我被提示輸入sudo的我的密碼。我在這裏錯過了什麼(除了我已經退出的頭髮)?

谷歌發現

https://groups.google.com/forum/?fromgroups#!topic/capistrano/QNYnvW8obrg

與具有類似問題的人一個線程。線程中沒有註明結論/解決方案。

+0

那是什麼'#{try_sudo}'位?如果你把它拿出來呢? – sbeam

+0

如果':use_sudo'設置爲'false','#{try_sudo}'應該_sudoize_該命令。我將它包含在'sudo_test'中,因爲capistrano rails任務可能也會使用它,並且很可能出現問題的原因。 –

+0

我們在我們的deploy.rb文件中使用'sudo -i '。 – yeowzir

回答

4

顯然,不能禁用某些capistrano任務的sudo功能。假設服務器上的非特權用戶不應該能夠執行某些任務。

有問題的命令是mkdir。我認爲如果父文件夾是他們有權這樣做的,那麼非特權用戶應該能夠運行此命令。我還會爭辯說,用戶可能實際上是一個特權用戶,例如root。最佳實踐?不必要。是的,在某些部署的理由範圍內。

這裏是鏈接到響應我原來的問題:

https://github.com/capistrano/capistrano/issues/211#issuecomment-7667467

+1

:use_sudo,false爲mkdir工作(使用deploy:setup) – vish

12

對於其他人誰運行到這個問題,併爲像我這樣的傻瓜。確保你沒有引用錯誤。我:

set :use_sudo, "false" 

,當我打開它

set :use_sudo, false 

大部分事情開始工作,我所期望的方式。正如YWCA Hello指出的,仍有一些命令忽略了use_sudo設置。但是,不要忘記正確設置它。

+0

作爲解釋(未閱讀capistrano代碼的相關部分):「false」是ruby中的真實值。只有無和假是假的。任何其他價值,包括0,「」,[],被認爲是真的。 因此設置:use_sudo爲「false」與設置:use_sudo爲true相同。 –