Ubuntu切换rbenv后Nginx+Passenger Ruby版本不匹配问题修复
修复Passenger引用错误Ruby版本的问题
步骤1:获取rbenv管理的Ruby绝对路径
在终端运行以下命令,得到正确的Ruby解释器路径:
rbenv which ruby
输出示例:/home/your-user/.rbenv/versions/3.2.4/bin/ruby —— 这个就是你需要的正确路径。
步骤2:修改Nginx配置指定Passenger Ruby路径
找到你的应用对应的Nginx配置文件(通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下),打开后在server块中添加或修改以下配置:
# 替换成你自己的Ruby路径 passenger_ruby /home/your-user/.rbenv/versions/3.2.4/bin/ruby;
步骤3:(可选但推荐)指定Bundler路径
为了避免使用系统默认的Bundler,同样用rbenv的Bundler路径:
先获取Bundler路径:
rbenv which bundle
然后在Nginx配置的server块中添加:
# 替换成你自己的Bundler路径 passenger_bundler /home/your-user/.rbenv/versions/3.2.4/bin/bundle;
步骤4:验证配置并重启Nginx
先检查Nginx配置是否合法:
sudo nginx -t
如果输出test is successful,就重启Nginx生效:
sudo systemctl reload nginx
验证修复效果
可以在应用根目录添加一个简单的测试接口或脚本,输出当前Ruby版本,比如在Rails的config/routes.rb里加:
get '/ruby-version', to: proc { [200, {}, ["Ruby Version: #{RUBY_VERSION}"]] }
访问该路径,确认返回的是3.2.4即可。
说明:直接指定绝对路径是最可靠的方式,避免Passenger因为没加载rbenv的shell环境变量而使用系统Ruby。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

