Deployment 如何通过Capistrano3在服务器上使用不同于命令行的用户名部署代码?

Deployment 如何通过Capistrano3在服务器上使用不同于命令行的用户名部署代码?,deployment,capistrano,capistrano3,Deployment,Capistrano,Capistrano3,我最近升级到Capistrano 2.x到3.x,过程相当简单。但让我感到困扰的是,capistrano2.x中曾经存在的命令行功能丢失了。具体来说,如果我想通过与系统当前登录用户不同的用户部署到远程服务器,我可以运行如下命令: cap -s user=remote_user staging deploy server 'example.com', user: ENV["CAP_USER"] || 'remote_user', roles: %w{app db web}, my_propert

我最近升级到Capistrano 2.x到3.x,过程相当简单。但让我感到困扰的是,capistrano2.x中曾经存在的命令行功能丢失了。具体来说,如果我想通过与系统当前登录用户不同的用户部署到远程服务器,我可以运行如下命令:

cap -s user=remote_user staging deploy
server 'example.com', user: ENV["CAP_USER"] || 'remote_user', roles: %w{app db web}, my_property: :my_value
export CAP_USER=remote_user && cap staging deploy
Capistrano3.x允许通过如下配置设置在部署脚本中设置特定用户;注意
用户:
选项:

server 'example.com', user: 'remote_user', roles: %w{app db web}, my_property: :my_value
这真是太好了!但我在设置上执行系统管理,在这些设置中,多个用户(不仅仅是一个普通的
deploy
用户)可以部署由服务器上的组权限管理的代码。这意味着用户、
linus
snoopy
lucy
都使用相同的代码,然后使用自己唯一的用户名进行部署,一切正常。不,现在至少可以说,将此设置切换为使用通用的
deploy
不是一个容易的选择。从部署的角度来看,代码库是相当简单的PHP代码,Capistrano有助于简化部署工作流

我不想回到Capistrano 2.x。那么,如何让这些用户和Capistrano脚本与Capistrano 3.x设置保持一致,但仍然允许每个人通过各自的用户帐户独立部署代码呢

那么,我如何让这些用户和Capistrano脚本与 Capistrano 3.x设置,但仍允许用户独立部署 通过他们自己的个人用户帐户编码

虽然不像使用
-s user=remote\u user
的Capistrano 2.x方法那样干净,但是通过使用Capistrano 3.x中的环境变量可以实现设置自定义用户名的类似目标。这已经过测试,在Capistrano 3.4.0中运行良好

首先要做的是调整服务器设置以允许环境变量。因此,上面的
服务器
行如下所示:

server 'example.com', user: 'remote_user', roles: %w{app db web}, my_property: :my_value
现在更改为添加一个
ENV[“CAP_USER”]
变量,如下所示:

cap -s user=remote_user staging deploy
server 'example.com', user: ENV["CAP_USER"] || 'remote_user', roles: %w{app db web}, my_property: :my_value
export CAP_USER=remote_user && cap staging deploy
逻辑基本上可以归结为:如果设置了
ENV[“CAP_USER”]
,则使用它。如果没有,只需使用
远程用户

现在,要从命令行中利用这一点,只需如下部署:

cap -s user=remote_user staging deploy
server 'example.com', user: ENV["CAP_USER"] || 'remote_user', roles: %w{app db web}, my_property: :my_value
export CAP_USER=remote_user && cap staging deploy
请注意,
export CAP_USER=remote_USER
设置了名为
CAP_USER
的环境变量,然后在Capistrano 3.x脚本中将其作为
ENV[“CAP_USER”]
访问。
&&
只是一个Bash命令,用于将该命令连接到下一个
cap staging deploy


如果想的话,,你可以调整他们的
~/.bash_配置文件
,将
CAP_用户
永久设置为
remote_用户
,这样基本的
CAP staging deploy
就可以按原样使用,而不必记住复合命令的语法。

在线上有很多讨论和帖子解释Capistrano 3.x是如何使用的环境变量,而不是Capistrano 2.x中使用的
-s
设置,但很少有人明确说明如何实际实现这样的环境变量设置,以处理使用相同Capistrano脚本的多个用户。因此,这个自我张贴的问题和答案线程。