Ruby on rails 如何在Capistrano3中为用户设置默认shell或sudo

Ruby on rails 如何在Capistrano3中为用户设置默认shell或sudo,ruby-on-rails,git,shell,capistrano,capistrano3,Ruby On Rails,Git,Shell,Capistrano,Capistrano3,我目前正在从Capistrano 2.x迁移到rails应用程序的3.x,并遇到以下问题。服务器上的常规设置包含一个部署用户,该用户应负责部署,但是当用户进行部署时,他们会使用自己的用户名连接到服务器 在Capistrano 2.x中,我可以使用default\u shell选项来完成这项工作 set :default_shell, "sudo -u deploy /bin/sh" 这在Capistrano3.x中不起作用。有没有办法在before钩子中将shell或sudo设置为部署用户 我

我目前正在从Capistrano 2.x迁移到rails应用程序的3.x,并遇到以下问题。服务器上的常规设置包含一个部署用户,该用户应负责部署,但是当用户进行部署时,他们会使用自己的用户名连接到服务器

在Capistrano 2.x中,我可以使用
default\u shell
选项来完成这项工作

set :default_shell, "sudo -u deploy /bin/sh"
这在Capistrano3.x中不起作用。有没有办法在before钩子中将shell或sudo设置为部署用户

我尝试过的事情:

  • 设置
    :default_shell
    选项不起上述作用
  • 我试着在一个前钩子中向用户进行sudo。类似于
    sudo-s-u deploy
    ,在capistrano之外运行良好。顺便说一下,我的用户是为部署用户设置的无密码sudo。但在Capistrano中,它运行命令,然后挂起
  • 根据,似乎可以为每个命令预先添加
    sudo-u deploy
    ,但这似乎并不完全有效。在中的两个命令中,部署仍会中止,但在权限被拒绝的情况下,作为“我的用户”执行异常
  • 我可以将一些命令单独映射为
    SSHKit.config.command\u map[:git]=“sudo-u deploy git”
    ,但这似乎不是最好的方法,我没有需要映射的所有命令的列表
  • 更新: 在我的第三次尝试中,映射所有命令似乎都能正常工作

    SSHKit.config.command_map = Hash.new do |hash, command|
      hash[command] = "sudo -u deploy #{command}"
    end
    

    但并非完全如此。capistrano首先要做的事情之一是运行git:检查哪个上传了文件
    /tmp/git ssh.sh
    。但是这个文件是用我的用户而不是部署用户创建的。

    如果您只需要更改部署用户,那么在capistrano 3中就容易多了。假设您具有此文件结构:

    config
    |__deploy
       |__production.rb
       |__staging.rb
    
    Capfile
    
    然后在production.rb或staging.rb中(取决于要部署到的环境):


    我还没有尝试过(而且文档非常稀少),但这可能是您需要的:@MattBrictson interest。。这似乎正是我想要的。是的,设置用户是可能的,但连接后不能切换。安全设置的方式我无法以部署身份登录。
    set :user, 'deploy'
    
    server 'example.com', user: fetch(:user)