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

如何解决Ruby版本不匹配问题?Phusion Passenger+NGINX部署RoR报错

解决Phusion Passenger + NGINX部署RoR应用的Ruby版本不匹配问题

这个问题我碰到过好多次了——核心原因就是Phusion Passenger没有使用你通过rbenv安装的Ruby 2.5.1,而是默认调用了系统自带的Ruby 2.3.1。本地rails s能正常运行是因为你的终端加载了rbenv的环境变量,但Nginx/Passenger作为系统服务启动时,并不会继承这些用户级的环境配置。

下面是具体的解决步骤:

1. 确认rbenv管理的Ruby 2.5.1的实际路径

在你的终端里(也就是能正常运行rails s的那个环境),执行以下命令获取Ruby 2.5.1的绝对路径:

rbenv which ruby

输出会类似这样:

/home/your-username/.rbenv/versions/2.5.1/bin/ruby

把这个路径记下来,后面要用到。

2. 配置Passenger使用指定的Ruby版本

有两种可靠的方式让Passenger使用正确的Ruby版本,选其中一种即可:

方式一:直接在Nginx配置中指定Ruby路径

找到你的Nginx站点配置文件(通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下),打开后在server块中添加passenger_ruby指令,指向刚才获取的路径:

server {
    listen 80;
    server_name your-domain.com; # 替换成你的域名或IP
    root /path/to/your/rails/app/public; # 替换成你的Rails应用public目录路径
    passenger_enabled on;
    
    # 添加这一行,使用rbenv管理的Ruby版本
    passenger_ruby /home/your-username/.rbenv/versions/2.5.1/bin/ruby;
}

保存配置后,重启Nginx服务:

sudo systemctl restart nginx

方式二:让Passenger加载rbenv的环境变量

如果你的服务器上有多个Rails应用,且都用rbenv管理Ruby版本,可以让Passenger加载rbenv的环境配置:

  1. 在你的Rails项目根目录创建一个config/passenger_env_vars.conf文件,内容如下(替换成你的用户名):
PATH=/home/your-username/.rbenv/shims:/home/your-username/.rbenv/bin:$PATH
  1. 在Nginx的站点配置中添加以下指令,指向这个文件:
server {
    # 其他配置...
    passenger_env_vars_file /path/to/your/rails/app/config/passenger_env_vars.conf;
}

同样,保存后重启Nginx。

3. 确保Gemfile与Ruby版本一致且依赖安装正确

  1. 打开你的Rails项目根目录下的Gemfile,确认里面的Ruby版本声明是:
ruby '2.5.1'
  1. 在终端的项目根目录下,重新安装依赖(确保用的是rbenv的Ruby):
bundle install

这会把gem安装到rbenv管理的Ruby路径下,而不是系统Ruby的/var/lib/gems/2.3.0目录。

4. 验证配置是否生效

执行以下命令查看Passenger当前使用的Ruby版本:

passenger-config about ruby-command

如果输出的Ruby版本是2.5.1,说明配置成功了。此时再访问你的应用,版本不匹配的错误应该就消失了。

内容的提问来源于stack exchange,提问作者Jasjeet Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:53:51