我已经让capistrano 3以非root用户的无密码部署完美运行。
我现在要做的是设置一个安装脚本来安装upstart服务,sudoers。D文件并在服务器上安装一些依赖项。
,这样我就可以通过简单地在生产环境中输入用户和主机来安装新服务器。运行cap production setupserver
问题是我创建的安装脚本需要以root身份运行。
但由于这是一次性的事情,我只想向用户询问根密码并在服务器上运行几个任务。
as :root
命令不工作,因为它使用su -c
我可以要求输入密码,如下所示http://capistranorb.com/documentation/faq/how-can-i-get-capistrano-to-prompt-for-a-password/
关于如何覆盖生产中指定的用户的任何建议。rb文件?
和如何通过要求的密码?
我最终解决这个问题的方法是为同一台服务器添加另一个角色。
role :app, 'theappuser@myserver'
role :install, 'root@myserver', :no_release => true
然后像这样做
desc 'Install nginx'
task :install do
on roles(:install) do
require 'erb'
template = ERB.new(File.new('deploy/templates/nginx.conf.erb').read).result(binding)
upload! StringIO.new(template), "/etc/nginx/conf.d/#{fetch(:domain)}.conf"
end
on roles(:app) do
invoke 'nginx:restart'
end
end
如果我理解正确的话,这应该可以解决您的问题,使用户变量:
set :current_user, Proc.new { current_user = Capistrano::CLI.ui.ask "Enter deploy user" }
if current_user.present?
set :user, "#{current_user}"
end
它将做什么它将在运行for user命令之前询问您,然后将该用户分配给生产环境。Rb:user,那么你就可以在设置时控制它。