Passenger未采用RVM默认Ruby版本导致Nginx启动报错如何解决?
问题解决方案
该问题的核心原因是Passenger默认调用系统全局安装的旧版Ruby 2.3,未识别RVM管理的Ruby 3.0.2版本,可按以下步骤修复:
步骤1:修复RVM wrapper脚本
登录有权限执行rvm命令的普通用户,依次执行以下命令:
rvmsudo rvm get stable && rvm reload && rvmsudo rvm repair all
如果执行后仍提示wrapper脚本异常,继续执行:
rvmsudo rvm wrapper ruby-3.0.2 --no-prefix --all
步骤2:获取RVM管理的Ruby 3.0.2完整路径
仍在普通用户权限下执行以下命令,获取Passenger可识别的Ruby路径:
passenger-config about ruby-command
执行成功后会输出类似如下内容,复制Command对应的值备用:
Command: /usr/local/rvm/wrappers/ruby-3.0.2/ruby Version: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
步骤3:修改Nginx Passenger配置
切换到root用户,编辑Nginx配置文件:
- 全局修改默认Ruby版本:编辑
/etc/nginx/nginx.conf,在http块中添加/修改配置 - 仅修改单个站点的Ruby版本:编辑对应站点的配置文件,在
server块中添加/修改配置
配置内容如下,将路径替换为你上一步复制的路径:
passenger_ruby /usr/local/rvm/wrappers/ruby-3.0.2/ruby;
步骤4:升级Bundler版本适配新Ruby
回到普通用户,进入应用根目录执行以下命令,安装Bundler 2.x版本并重装依赖:
gem install bundler -v '~> 2.3' bundle install
步骤5:重启Nginx验证
切换到root用户,先检查配置语法是否正确:
nginx -t
提示语法无误后重启Nginx服务:
systemctl restart nginx
重启后访问应用即可验证是否恢复正常。
内容的提问来源于stack exchange,提问作者mohit chavda
相关产品推荐
相关产品推荐

