【问题标题】:Setting up Unicorn for multi-user Capistrano deployment为多用户 Capistrano 部署设置 Unicorn
【发布时间】:2016-04-12 00:49:11
【问题描述】:

我在迁移我们的 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

我们用于 unicorn 部署的 gem 是 capistrano-unicorn。我们正在使用 ruby​​ 2.1.5、capistrano 2.15.7 和 unicorn 5.0.1。

【问题讨论】:

    标签: ruby-on-rails ruby deployment capistrano unicorn


    【解决方案1】:

    您应该在单独的用户下运行 unicorn,与个人开发者无关,例如 www。那么独角兽插座可能在别处,例如在/tmp。使用unicorn_user 选项(参见gem readme)使Capistrano 重新加载或重新启动给定用户下的独角兽服务器。

    您还必须为您的开发人员组设置sudo 规则,以便他们可以以www 用户身份运行命令,而无需提供密码。在/etc/sudoers 文件中添加类似这样的内容:

    %developers ALL=(www) NOPASSWD: ALL
    

    警告:这允许developers 组中的任何用户以www 用户身份运行any 命令而无需提供密码!一种更干净、更安全的方法是只允许启动独角兽的命令并向其发送重新加载/停止等信号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2014-03-09
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      相关资源
      最近更新 更多