Ruby on rails 为多用户Capistrano部署设置Unicorn
我在迁移我们rails应用程序的capistrano部署时遇到了一些问题,使其能够部署多个用户。最初,我们在/tmp下为unicorn服务器提供了一个套接字,由进行部署的用户拥有。这不适用于多个用户,因为他们没有修改文件的权限 我们尝试了第二种方法,将套接字文件放在应用程序的tmp目录下。在每次部署之后,我们将套接字文件的所有权重置为部署者的组,该组在用户之间共享。这适用于用户的第一次部署,但如果同一用户连续进行第二次部署,则不适用。如果部署了不同的用户,它可以正常工作 基本上,我们最终得到了一个部署系统,在这个系统中,每个人只能连续部署一次,而在这两个系统之间必须要求另一个人部署一次。 看起来在第二次部署和进一步部署时,unicorn进程没有正确地重新启动。在第一次部署中,成功部署的unicorn日志显示:Ruby on rails 为多用户Capistrano部署设置Unicorn,ruby-on-rails,ruby,deployment,capistrano,unicorn,Ruby On Rails,Ruby,Deployment,Capistrano,Unicorn,我在迁移我们rails应用程序的capistrano部署时遇到了一些问题,使其能够部署多个用户。最初,我们在/tmp下为unicorn服务器提供了一个套接字,由进行部署的用户拥有。这不适用于多个用户,因为他们没有修改文件的权限 我们尝试了第二种方法,将套接字文件放在应用程序的tmp目录下。在每次部署之后,我们将套接字文件的所有权重置为部署者的组,该组在用户之间共享。这适用于用户的第一次部署,但如果同一用户连续进行第二次部署,则不适用。如果部署了不同的用户,它可以正常工作 基本上,我们最终得到了一
INFO -- : Refreshing Gem list
INFO -- : listening on addr=/var/www/dashboard/current/tmp/dashboard.socket fd=11
INFO -- : worker=0 ready
INFO -- : worker=1 ready
INFO -- : worker=2 ready
INFO -- : master process ready
INFO -- : worker=3 ready
在第二次部署中,失败日志如下所示:
INFO -- : executing ["/var/www/dashboard/shared/bundle/ruby/2.1.0/bin/unicorn", "-c", "/var/www/dashboard/current/config/unicorn/production.rb", "-E ", "deployment", "-D", {11=>#<Kgio::UNIXServer:/var/www/dashboard/current/tmp/dashboard.socket>}] (in /var/www/dashboard/releases/20160405234438)
INFO -- : forked child re-executing...
INFO -- : inherited addr=/var/www/dashboard/current/tmp/dashboard.socket fd=11
INFO -- : Refreshing Gem list
INFO -- : reaped #<Process::Status: pid 22939 exit 0> worker=0
INFO -- : reaped #<Process::Status: pid 22942 exit 0> worker=1
INFO -- : reaped #<Process::Status: pid 22945 exit 0> worker=2
INFO -- : reaped #<Process::Status: pid 22948 exit 0> worker=3
INFO -- : master complete
INFO -- : worker=0 ready
INFO -- : worker=1 ready
INFO -- : worker=2 ready
INFO -- : master process ready
INFO -- : worker=3 ready
INFO--:执行[“/var/www/dashboard/shared/bundle/ruby/2.1.0/bin/unicorn”、“-c”、“/var/www/dashboard/current/config/unicorn/production.rb”、“-E”、“deployment”、“-D”、{11=>#}](在/var/www/dashboard/releases/20160405234438中)
信息--:分叉子级正在重新执行。。。
信息--:继承的地址=/var/www/dashboard/current/tmp/dashboard.socket fd=11
信息--:刷新宝石列表
信息--:收获的#工人=0
信息--:收获#工人=1
信息--:收获#工人=2
信息--:收获#工人=3
信息--:主控完成
信息--:worker=0准备就绪
信息--:worker=1就绪
信息--:worker=2就绪
信息--:主进程就绪
信息--:worker=3准备就绪
我们用于独角兽部署的gem是capistrano unicorn。我们正在使用ruby 2.1.5、capistrano 2.15.7和unicorn 5.0.1。您应该在一个单独的用户下运行unicorn,而不是与单个开发人员相关,例如
www
。然后,麒麟插座可能位于其他位置,例如/tmp
中。使用unicorn\u user
选项(请参阅)使Capistrano重新加载或重新启动给定用户下的unicorn服务器
您还必须为开发人员组设置sudo
规则,以便他们可以作为www
用户运行命令,而无需提供密码。将类似的内容添加到/etc/sudoers
文件:
%developers ALL=(www) NOPASSWD: ALL
警告:这允许developers
组中的任何用户以www
用户身份运行any命令,而无需提供密码!一种更干净、更安全的方法是只允许启动unicorn并向其发送重新加载/停止等信号的命令