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

升级Phusion Passenger至5.3.0后Nginx上Rails应用启动失败报断言错误

解决Passenger 5.3.0升级后断言失败(!shell.empty())的问题

这个报错是Passenger 5.3.0版本的已知兼容性bug,主要发生在应用运行用户的默认shell为非交互式shell(比如/usr/sbin/nologin、/bin/false)或者shell配置异常的场景下。下面是几个经过验证的解决办法,按推荐优先级排序:

方法1:指定Passenger使用的Shell(最安全,不影响其他配置)

在你的Nginx配置文件中(通常位于/etc/nginx/sites-available/你的应用配置),在server块或者http全局块中添加以下指令,强制Passenger使用标准交互式shell:

passenger_shell /bin/bash;

或者如果系统里只有sh的话,用:

passenger_shell /bin/sh;

添加完成后,重启Nginx服务生效:

sudo service nginx restart

方法2:升级到修复后的Passenger版本

这个bug在Passenger 5.3.1及后续版本中已经被官方修复,你可以直接升级到最新的稳定版本:

sudo apt-get update
sudo apt-get install --only-upgrade passenger

升级完成后重启Nginx:

sudo service nginx restart

方法3:降级到之前的稳定版Passenger

如果暂时不想升级到新版本,可以降级到5.2.x系列的稳定版本(比如5.2.3),这个版本和你的Rails 4.2、Ruby 2.4.4兼容性很好:

# 先卸载当前版本
sudo apt-get remove passenger
# 安装指定版本(注意根据你的Ubuntu/Debian版本调整后缀,比如~trusty1、~xenial1)
sudo apt-get install passenger=5.2.3-1~bionic1

完成后同样需要重启Nginx服务。

方法4:修改应用运行用户的默认Shell

如果你的应用是用www-data或者其他系统用户运行的,可以修改该用户的默认Shell为bash:

sudo chsh -s /bin/bash www-data

修改后重启Nginx和Passenger服务即可。不过这个方法可能会影响该用户运行的其他服务,所以谨慎使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:10:59