我的deploy.rb
before("deploy:cleanup") { set :use_sudo, true }
after "deploy:restart", "deploy:cleanup"
after("deploy:cleanup") { set :use_sudo, false }
这是因为我的设置中的其他一些因素会创建具有不同用户的文件,我需要能够清理它们。在其他地方,我将其设置为false
默认值。
问题是,当我运行deploy
时,我无法运行cleanup
,我收到权限错误,并且我看到生成的命令为
ls -1dt /u/apps/MYAPP/releases/* | tail -n +6 | xargs rm -rf
但是,如果我直接运行deploy:cleanup
,它可以正常使用以下命令。
sudo -p 'sudo password: ' ls -1dt /u/apps/netprice/releases/* | tail -n +6 | sudo -p 'sudo password: ' xargs rm -rf
我不确定这是否符合预期,我理解capistrano错误,如果有更清洁(:P)的方法来实现这个目标?
我正在使用Rails 3.2和capistrano 2.15
答案 0 :(得分:1)
您的代码无效的原因是您尝试设置错误的配置密钥。 deploy:cleanup
任务在内部使用try_sudo
方法。如果您看到该方法的source,您会注意到它会根据run_method
键而不是use_sudo
的内容执行命令。
这意味着,如果您将代码更改为set :run_method, :sudo
(然后又返回:run
),您应该得到所需内容。
作为旁注,当capistrano启动时,use_sudo
键实际为used internally,以将适当的值设置为run_method
答案 1 :(得分:0)
通常的方法是使用Unix权限组:使两个用户成为同一权限组的成员,并向组成员授予删除操作(+ w)。然后,您的部署用户'将能够删除其他用户创建的文件。