Ubuntu22.04下Ruby3.2.1+Rails7遇Passenger权限拒绝错误求助
解决Nginx+Passenger 500错误:Passengerfile.json权限问题
问题本质
日志显示Nginx worker进程(UID 33,对应www-data用户)无法读取/home/deploy/mapt/current/Passengerfile.json,但该文件实际不存在。这是因为Passenger 6.x会自动尝试读取应用根目录的Passengerfile.json,即使文件不存在,应用目录的权限不足会导致进程无法验证文件状态,进而抛出权限错误。
修复方案
1. 调整应用目录权限
确保Nginx worker进程能遍历应用的父目录并访问应用目录:
- 执行以下命令开放目录遍历权限:
sudo chmod o+x /home/deploy /home/deploy/mapt /home/deploy/mapt/current - 可选:将应用目录组设置为
www-data并开放组权限,增强安全性:sudo chgrp -R www-data /home/deploy/mapt/current sudo chmod g+rwx -R /home/deploy/mapt/current
2. 强制禁用Passengerfile.json检查
如果不想调整目录权限,可在应用的Nginx配置块(server或location段)中添加指令,跳过该文件的读取:
passenger_passengerfile_json none;
3. 验证Ruby路径权限
检查Passenger配置的Ruby路径是否对www-data可访问:
- 执行命令验证:
sudo -u www-data /home/deploy/.rbenv/shims/ruby -v
若出现权限错误,调整rbenv目录权限:
sudo chmod o+x /home/deploy/.rbenv /home/deploy/.rbenv/shims
4. 重启服务生效
完成调整后重启相关服务:
sudo systemctl restart nginx sudo passenger-config restart-app /home/deploy/mapt/current
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

