2016-04-12 65 views
1

我一直在迁移我们的rails应用程序的capistrano部署方面遇到了一些麻烦,以便让多个用户可以部署。最初,我们在用户所拥有的/ tmp下为我们的独角兽服务器提供了一个套接字,该用户将进行部署。这不适用于多个用户,因为他们没有修改文件的权限。为多用户Capistrano部署设置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 

我们正在使用我们的麒麟部署创业板Capistrano酒店-独角兽。我们使用的是ruby 2.1.5,capistrano 2.15.7和独角兽5.0.1。

回答

1

您应该在独立用户下运行独角兽,与个人开发人员无关,如www。然后,独角兽插座可以在别处,例如,在/tmp。使用unicorn_user选项(请参阅gem readme)使Capistrano在给定用户下重新加载或重新启动独角兽服务器。

您还需要为您的开发人员组设置sudo规则,以便他们可以在不提供密码的情况下以www用户的身份运行命令。加入这样的事情/etc/sudoers文件:

%developers ALL=(www) NOPASSWD: ALL 

警告:这允许任何用户developers组中的用户www不给密码运行任何命令!更清洁和更安全的方法是只允许启动独角兽的命令并向其发送用于重新加载/停止的信号等。