使用Ruby3.3.3+Capistrano部署Rails至VPS时遭遇Passenger加载错误
错误信息
App 686138 output: /home/deployer/.rbenv/versions/3.3.3/bin/ruby:
App 686138 output: No such file or directory -- Passenger AppPreloader: /home/deployer/hino/current (LoadError)
App 686138 output:
[ E 2024-08-25 15:43:49.5509 686090/Tk age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /home/deployer/hino/current: The application process exited prematurely.
Error ID: 86cd6d2c
Error details saved to: /tmp/passenger-error-k6FIQI.html
排查修复步骤
1. 校验目录权限
路径存在但Passenger无法访问,优先排查权限问题:
# 递归设置目录基础访问权限 chmod -R 755 /home/deployer/hino # 将NGINX所属用户(通常为www-data)加入deployer用户组 sudo usermod -aG deployer www-data # 确保目录所有者为deployer用户 sudo chown -R deployer:deployer /home/deployer/hino
2. 确认Ruby与Passenger兼容性
Ruby 3.3.x需要Passenger 6.0.18及以上版本支持,先检查当前Passenger版本:
passenger -v
版本过低则更新Passenger:
sudo passenger-install-nginx-module
同时在Capistrano配置文件config/deploy.rb中确认rbenv环境设置正确,保证Passenger使用的Ruby版本与项目一致:
set :rbenv_type, :user set :rbenv_ruby, '3.3.3' set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
3. 检查Capistrano符号链接
current是Capistrano生成的符号链接,确认其指向有效部署版本:
ls -l /home/deployer/hino/current
若链接失效,重新执行部署:
cap production deploy
4. 查看详细错误日志
错误提示中的临时文件包含更具体的报错细节,直接查看:
cat /tmp/passenger-error-k6FIQI.html
通常会暴露bundle依赖未安装、配置文件缺失等深层问题,针对性修复即可。
5. 重启服务生效
修改配置后,重启NGINX和Passenger应用:
sudo systemctl restart nginx passenger-config restart-app /home/deployer/hino/current
内容的提问来源于stack exchange,提问作者IbunHabibu Salim

