Capistranoでタスクの実行中にユーザを切り替える
Capistranoって簡単なインストールスクリプトとか書く際には便利なんだけどユーザの切り替えどうするのがいいかな?なんて思って調べてみたら、以下のサイトがヒット。
http://www.pgrs.net/2008/8/6/switching-users-during-a-capistrano-deploy
そのものズバリな解答がのっていたのだけど、パスワードは入力させたかったので↓な感じにしてみた。
# helpers {{{ def with_user(new_user, &block) old_user, old_pass = user, password set :user, new_user set :password, Capistrano::CLI.password_prompt("password[#{new_user}]: ") close_sessions yield set :user, old_user set :password, old_pass close_sessions end def close_sessions sessions.values.each { |session| session.close } sessions.clear end # }}} # sample task task :multi_user_task do run "whoami" with_user "user2" do run "whoami" end end
便利!