Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为多用户Capistrano部署设置Unicorn_Ruby On Rails_Ruby_Deployment_Capistrano_Unicorn - Fatal编程技术网

Ruby on rails 为多用户Capistrano部署设置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目录下。在每次部署之后,我们将套接字文件的所有权重置为部署者的组,该组在用户之间共享。这适用于用户的第一次部署,但如果同一用户连续进行第二次部署,则不适用。如果部署了不同的用户,它可以正常工作 基本上,我们最终得到了一

我在迁移我们rails应用程序的capistrano部署时遇到了一些问题,使其能够部署多个用户。最初,我们在/tmp下为unicorn服务器提供了一个套接字,由进行部署的用户拥有。这不适用于多个用户,因为他们没有修改文件的权限

我们尝试了第二种方法,将套接字文件放在应用程序的tmp目录下。在每次部署之后,我们将套接字文件的所有权重置为部署者的组,该组在用户之间共享。这适用于用户的第一次部署,但如果同一用户连续进行第二次部署,则不适用。如果部署了不同的用户,它可以正常工作

基本上,我们最终得到了一个部署系统,在这个系统中,每个人只能连续部署一次,而在这两个系统之间必须要求另一个人部署一次。 看起来在第二次部署和进一步部署时,unicorn进程没有正确地重新启动。在第一次部署中,成功部署的unicorn日志显示:

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并向其发送重新加载/停止等信号的命令