【发布时间】:2015-06-25 19:56:29
【问题描述】:
我目前正在从 Capistrano 2.x 迁移到 Rails 应用程序的 3.x 并遇到以下问题。服务器上的常规设置包含一个部署用户,该用户应负责部署,但是当用户进行部署时,他们会使用自己的用户名连接到服务器。
在 Capistrano 2.x 中,我可以使用 default_shell 选项完成此操作。
set :default_shell, "sudo -u deploy /bin/sh"
这在 Capistrano 3.x 中不起作用。有没有办法在前钩子中设置 shell 或 sudo 到部署用户?
我尝试过的事情:
- 设置
:default_shell选项不起作用。 - 我尝试在 before 钩子中对用户进行 sudo-ing。
sudo -s -u deploy之类的东西,在 capistrano 之外也能正常工作。顺便说一下,我的用户设置为部署用户的无密码 sudo。但在 Capistrano 中,它运行命令然后就挂起。 - 根据this SO question,似乎可以在每个命令前添加
sudo -u deploy,但这似乎并不完全有效。输入几个命令后,部署仍然中止,但在权限被拒绝时以我的用户身份执行异常。 - 我可以将某些命令单独映射为
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。但是这个文件是由我的用户而不是部署用户创建的。
【问题讨论】:
-
我还没有尝试过(文档也很少),但这可能是你需要的:github.com/fundingcircle/sshkit-backends-netssh_global
-
@MattBrictson 有趣.. 这似乎确实符合我的要求。
标签: ruby-on-rails git shell capistrano capistrano3