我目前正在从一个铁轨应用程序从Capistrano 2.x迁移到3.x并遇到以下问题。服务器上的常规设置包含应该负责部署的部署用户,但是当用户进行部署时,他们会使用自己的用户名连接到服务器。
在Capistrano 2.x中,我能够使用default_shell
选项完成此操作。
set :default_shell, "sudo -u deploy /bin/sh"
这在Capistrano 3.x中不起作用。有没有办法在before hook中设置shell或sudo给部署用户?
我尝试过的事情:
:default_shell
选项不起作用。sudo -s -u deploy
这样的东西,在capistrano之外工作正常。顺便说一句,我的用户已为部署用户设置了无密码sudo。但是在卡皮斯特拉诺,它运行命令,然后挂起。sudo -u deploy
,但这似乎并不完全有效。在几个命令中,部署仍然以在Permission denied上作为我的用户执行异常而中止。SSHKit.config.command_map[:git] = 'sudo -u deploy git'
,但这似乎不是最好的方法,我没有列出我需要映射的所有命令。更新 根据我的第三次尝试,映射所有命令通常似乎有效。
SSHKit.config.command_map = Hash.new do |hash, command|
hash[command] = "sudo -u deploy #{command}"
end
但不完全。 capistrano做的第一件事就是运行git:check上传文件/tmp/git-ssh.sh
。但是这个文件是由我的用户而不是部署用户创建的。
答案 0 :(得分:0)
如果您只需要更改部署用户,则在capistrano 3中它会更容易。假设你有这个文件结构:
{{1}}
然后在您的production.rb或staging.rb中(取决于您要部署到的环境):
{{1}}