Rails应用搭配Passenger+Nginx启动失败,Passenger日志报LoadError
检查Nginx运行用户的权限
确认Nginx运行用户(通常是www-data或nginx)对/home/my_user/.rbenv/versions/3.3.1/bin/ruby有执行权限,对/home/my_user/domains/my_domain/app/current目录及内部文件有读权限。可执行以下命令验证:ls -l /home/my_user/.rbenv/versions/3.3.1/bin/ruby sudo -u www-data ls /home/my_user/domains/my_domain/app/current确保rbenv环境在Passenger中生效
Passenger可能未继承rbenv的环境变量,需在Nginx的server配置块中显式指定Ruby路径:passenger_ruby /home/my_user/.rbenv/shims/ruby;重启Nginx后,执行
passenger-config about ruby-command查看Passenger当前识别的Ruby路径,确认与目标版本一致。检查current目录的有效性(若用部署工具)
如果current是软链接,确认其指向的实际目录存在且完整:ls -l /home/my_user/domains/my_domain/app/current同时检查目标目录是否包含Rails应用必需文件(如
config.ru、Gemfile)。验证Passenger与Ruby版本兼容性
确认Passenger版本支持Ruby 3.3.1,若不兼容需重新编译Passenger适配当前Ruby:passenger-install-nginx-module执行
passenger-config --version查看Passenger版本,确认版本兼容性。排查安全模块限制
若系统启用SELinux,临时关闭测试是否解决问题:sudo setenforce 0若问题消失,需添加SELinux规则允许Nginx访问目标路径。AppArmor环境同理,检查相关配置是否限制了路径访问。
启用Passenger详细日志
在Nginx配置中添加日志级别设置:passenger_log_level 3;重启Nginx后触发访问,查看日志中的具体报错细节,定位权限或路径相关问题。
手动启动应用测试
切换到Nginx运行用户,进入应用目录手动启动Rails服务,验证环境是否正常:sudo -u www-data cd /home/my_user/domains/my_domain/app/current && /home/my_user/.rbenv/versions/3.3.1/bin/ruby bin/rails server若手动启动报错,可直接定位应用本身的环境问题。
内容的提问来源于stack exchange,提问作者hananamar

