部署Rails应用时Passenger出现Ruby版本不匹配错误求助
解决Passenger + Nginx部署Rails应用时的Ruby版本不匹配问题
你遇到的问题是Nginx配置里指定了Ruby 3.0.0,但Passenger实际启动应用时用了3.2.3,导致Bundler版本不匹配。以下是针对性的排查和解决步骤:
1. 确保Nginx配置生效
- 先重启Nginx,让修改的
nginx.conf生效:sudo systemctl restart nginx - 验证Passenger实际使用的Ruby命令:
输出里的Ruby路径必须是passenger-config about ruby-command/home/ubuntu/.asdf/installs/ruby/3.0.0/bin/ruby,如果不是,说明配置没生效或被其他设置覆盖。
2. 锁定应用目录的Ruby版本
- 进入应用根目录
/var/www/fomo-app,检查asdf本地版本配置:
如果文件不存在或ruby版本不是3.0.0,执行:cd /var/www/fomo-app cat .tool-versionsasdf local ruby 3.0.0 - 在应用目录下验证当前Ruby版本:
确认显示ruby -vruby 3.0.0p0(或对应补丁版本),然后重新安装依赖:bundle install --deployment
3. 检查站点级Nginx配置是否覆盖全局设置
- 查看站点配置文件(通常在
/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下),如果里面有passenger_ruby指令,必须和全局配置一致,改成:
修改后重启Nginx。passenger_ruby /home/ubuntu/.asdf/installs/ruby/3.0.0/bin/ruby;
4. 让Nginx加载asdf环境变量
- Nginx运行用户可能没加载asdf的环境变量,导致优先使用系统Ruby。在
nginx.conf的http块中添加:
保存后重启Nginx。env PATH=/home/ubuntu/.asdf/shims:/home/ubuntu/.asdf/bin:$PATH;
5. 清理Passenger缓存并重启应用
- 强制重启Passenger应用实例:
passenger-config restart-app /var/www/fomo-app - 如果还是不行,停止Passenger并重启Nginx:
passenger stop sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者Rao ikram
相关产品推荐
相关产品推荐

