You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动Puma遇权限拒绝错误:Unix套接字无法创建/访问

解决Puma Unix Socket权限错误与配置问题

从你提供的错误信息和配置来看,问题主要出在目录权限和Puma配置语法错误两个核心点上,下面一步步帮你排查解决:

1. 修复Sockets目录的权限问题

你遇到的Errno::EACCES: Permission denied错误,本质原因是/var/tmp/app/sockets目录属于root:root,而你用vagrant用户启动Puma,没有权限在这个目录下创建socket文件。

执行以下命令调整目录权限:

# 将目录所有者改为vagrant用户,确保Puma能创建socket文件
sudo chown -R vagrant:vagrant /var/tmp/app/sockets

# 额外配置:如果Nginx运行用户(通常是www-data)需要访问socket,给目录添加组读写权限
sudo chgrp www-data /var/tmp/app/sockets
sudo chmod g+w /var/tmp/app/sockets

2. 修正Puma配置文件的语法错误

你的puma.development.rb里有两处明显的语法错误,这会直接导致Puma启动失败,无法生成socket文件:

  • environment "development 缺少末尾的闭合引号,修正后:
    environment "development"
    
  • ActiveRecord::Base.establish_connectio 拼写错误,应该是establish_connection,修正后:
    defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
    

3. 重新启动Puma并验证

修正配置后,重新执行启动命令:

/home/vagrant/.rbenv/shims/bundle exec puma -C /app/config/puma.development.rb -b unix:/var/tmp/app/sockets/puma.development.sock

然后检查sockets目录:

ls -al /var/tmp/app/sockets

此时应该能看到puma.development.sock文件,权限应为vagrant用户所有(或组包含www-data且具备读写权限)。

4. 确保Nginx能访问Socket文件

如果Nginx仍然报错无法连接socket,需要确认socket文件的权限设置:

# 给socket文件设置组读写权限,让www-data用户能正常访问
sudo chmod 660 /var/tmp/app/sockets/puma.development.sock

# 或者将vagrant用户加入www-data组,从根本上解决权限互通问题
sudo usermod -aG www-data vagrant

完成后重启Nginx生效:

sudo systemctl restart nginx

5. 查看Puma错误日志定位剩余问题

如果还是存在启动失败的情况,查看Puma的错误日志获取更详细的报错信息:

cat /app/log/puma.development.err.log

日志会明确提示启动失败的具体原因,比如未修复的语法错误、依赖缺失等。

内容的提问来源于stack exchange,提问作者kareem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:07:25