2012-05-25 31 views
7

Tôi không muốn sử dụng sudo cho bất kỳ lệnh được thực thi từ xa nào thông qua Capistrano. Cụ thể, khi tôi chạy cap deploy:setup, tôi được yêu cầu nhập mật khẩu sudo của mình trong lệnh mkdir đầu tiên. Tôi đã thêm set :use_sudo, false vào tệp deploy.rb của mình, nhưng điều này không tạo ra sự khác biệt.Capistrano sử dụng sudo ngay cả với "set: use_sudo, false"

Tôi bắt đầu với tệp deploy.rb khá hoàn chỉnh, nhưng đã bỏ nó xuống khi tôi bắt đầu gặp sự cố. Đây là phiên bản tối thiểu của tôi mà vẫn cho thấy use_sudo không được tôn trọng:

# 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 

chạy cap sudo_test kết quả trong tôi được nhắc nhập mật khẩu sudo tôi. Tôi đang thiếu gì ở đây (ngoài mái tóc tôi đã rút ra)?

Google phát hiện

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

Một chủ đề với một người nào đó có một vấn đề tương tự. Không có kết luận/độ phân giải nào được ghi trong chuỗi.

+0

bit '# {try_sudo}' là gì? nếu bạn lấy nó ra thì sao? – sbeam

+0

'# {try_sudo}' nên _sudoize_ lệnh nếu ': use_sudo' được đặt thành' false'. Tôi bao gồm nó trong 'sudo_test' bởi vì các nhiệm vụ đường ray capistrano có khả năng sử dụng nó là tốt, và có khả năng là nơi mà vấn đề bắt nguồn từ. –

+0

Chúng tôi sử dụng 'sudo -i ' trong tệp deploy.rb của chúng tôi. – yeowzir

Trả lời

4

Dường như, không thể vô hiệu hóa chức năng sudo với các tác vụ capistrano nhất định. Giả định là người dùng không có đặc quyền trên máy chủ không thể thực hiện một số nhiệm vụ nhất định.

Lệnh được đề cập là mkdir. Tôi cho rằng một người dùng không có đặc quyền sẽ có thể chạy lệnh này nếu thư mục cha là một thư mục mà họ có quyền làm như vậy. Tôi cũng cho rằng người dùng trên thực tế có thể là người dùng đặc quyền, chẳng hạn như root. Thực hành tốt nhất? Không cần thiết. Trong lĩnh vực lý do cho một số triển khai nhất định, vâng.

Dưới đây là liên kết để đáp ứng cho câu hỏi ban đầu của tôi:

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

+1

: use_sudo, false làm việc cho tôi với mkdir (sử dụng deploy: setup) – vish

12

Đối với bất kỳ ai khác chạy vào vấn đề này và là một kẻ ngốc như tôi. Hãy chắc chắn rằng bạn không trích dẫn sai. Tôi đã có:

set :use_sudo, "false" 

và khi tôi chuyển nó đến

set :use_sudo, false 

hầu hết mọi thứ bắt đầu làm việc theo cách tôi mong đợi. Vì YWCA Hello chỉ ra rằng vẫn có các lệnh bỏ qua cài đặt use_sudo. Tuy nhiên, đừng quên đặt đúng.

+0

Giải thích (không đọc phần liên quan của mã capistrano): "false" là giá trị true-ish trong ruby. Chỉ có nil và false là false-ish. Bất kỳ giá trị nào khác, incl. 0, "", [], được coi là đúng. Vì vậy, thiết lập: use_sudo thành "false" giống như cài đặt: use_sudo thành true. –

Các vấn đề liên quan