fis*_*ben 5 ubuntu nginx ruby-on-rails unicorn
我主要按照本指南在 Ubuntu (Amazon EC2) 上创建了一个 nginx/unicorn/capistrato 设置。我想一切都设置得像它应该的那样,但是当我启动 Unicorn 时,我在日志中收到(很多)这个错误:
E, [2012-09-08T08:57:20.658092 #12356] ERROR -- : Operation not permitted (Errno::EPERM)
/home/deployer/apps/bridgekalenderen.no/shared/bundle/ruby/1.9.1/gems/unicorn-4.3.1/lib/unicorn/worker.rb:82:in `initgroups'
Run Code Online (Sandbox Code Playgroud)
我看到它与用户的权限有关,但我无法弄清楚我遗漏了什么。如果我使用 sudo(或 rvmsudo,真的)启动服务器,它会很好地启动。
用户具有 sudo 功能,我已经多次修改了该应用程序,因此那里的文件权限应该没问题。/tmp 中的独角兽套接字归部署者用户所有,因此这也不应该是问题。
有没有人知道在哪里看?
更新:
经过一番挖掘,我发现它归结为一个Process.initgroups
抛出 EPERM的调用。我已经在 irb 中验证了这一点。我无法弄清楚导致错误的原因。用户可以阅读/etc/group
。
我终于弄明白了。问题是部署者用户的主要组是错误的。它应该是“员工”,但改为“部署者”。这意味着 unicorn 试图将新工作进程的所有权移交给它应该使用的组,但只有 root 可以这样做。
以防万一其他人需要知道,我通过/etc/passwd
如下编辑更改了主要组:
deployer:x:1002:50:,,,:/home/deployer:/bin/bash
Run Code Online (Sandbox Code Playgroud)
“50”是“staff”的 gid。一开始是1002。要获取“staff”组的 gid,请执行以下操作:
cat /etc/group | grep staff
Run Code Online (Sandbox Code Playgroud)
它会说一些类似的话:
staff:x:50:<comma separated list of users in this group>
Run Code Online (Sandbox Code Playgroud)
gid 是“x”之后的数字。
归档时间: |
|
查看次数: |
5624 次 |
最近记录: |