如何在capistrano 3中为用户设置默认shell或sudo

时间:2015-06-25 19:56:30

标签: ruby-on-rails git shell capistrano capistrano3

我目前正在从一个铁轨应用程序从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给部署用户?

我尝试过的事情:

  1. 设置:default_shell选项不起作用。
  2. 我尝试在之前的钩子中对用户进行sudo-ing。像sudo -s -u deploy这样的东西,在capistrano之外工作正常。顺便说一句,我的用户已为部署用户设置了无密码sudo。但是在卡皮斯特拉诺,它运行命令,然后挂起。
  3. 每{{}}},似乎可以在每个命令前加sudo -u deploy,但这似乎并不完全有效。在几个命令中,部署仍然以在Permission denied上作为我的用户执行异常而中止。
  4. 我可以单独将一些命令映射为SSHKit.config.command_map[:git] = 'sudo -u deploy git',但这似乎不是最好的方法,我没有列出我需要映射的所有命令。
  5. 更新 根据我的第三次尝试,映射所有命令通常似乎有效。

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

    但不完全。 capistrano做的第一件事就是运行git:check上传文件/tmp/git-ssh.sh。但是这个文件是由我的用户而不是部署用户创建的。

1 个答案:

答案 0 :(得分:0)

如果您只需要更改部署用户,则在capistrano 3中它会更容易。假设你有这个文件结构:

{{1}}

然后在您的production.rb或staging.rb中(取决于您要部署到的环境):

{{1}}