如何让Fullstaq Ruby与Phusion Passenger在Ubuntu 20.04兼容?
问题描述
在Ubuntu 20.04上通过apt安装Fullstaq Ruby、Phusion Passenger和Nginx(明确不想编译Nginx适配Passenger),遇到两个核心问题:
- Passenger的apt包依赖Ruby,但apt无法将Fullstaq仓库安装的Ruby识别为有效依赖项
- 已配置Nginx的Passenger参数指定Fullstaq Ruby路径,但Passenger启动仍使用系统默认Ruby
已尝试的Nginx配置:
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; passenger_ruby /usr/lib/fullstaq-ruby/versions/2.7-jemalloc/bin/ruby;
已安装包信息:
$ dpkg -l | grep ruby ii fullstaq-ruby-2.7-jemalloc 10-ubuntu-20.04 amd64 Fullstaq Ruby 2.7-jemalloc ii fullstaq-ruby-common 1.0-0 all Fullstaq Ruby common dependencies ii ruby2.7 2.7.0-5ubuntu1.7 amd64 Interpreter of object-oriented scripting language Ruby ii ruby 1:2.7+1 amd64 Interpreter of object-oriented scripting language Ruby (default version)
可行配置方案
1. 处理apt依赖识别问题
Passenger的apt包依赖系统ruby元包,而Fullstaq Ruby未提供该元包的替代,因此无需卸载系统默认的ruby和ruby2.7包——它们仅作为依赖占位存在,不会影响Passenger实际使用Fullstaq Ruby。
2. 确保Passenger正确加载Fullstaq Ruby
步骤1:验证Fullstaq Ruby路径有效性
先确认目标路径的Ruby可正常执行:
ls -l /usr/lib/fullstaq-ruby/versions/2.7-jemalloc/bin/ruby /usr/lib/fullstaq-ruby/versions/2.7-jemalloc/bin/ruby -v
若输出显示Fullstaq Ruby 2.7版本,说明路径无误。
步骤2:正确配置Nginx的Passenger参数
配置需放在对应作用域内:
- 全局生效:将配置写入
/etc/nginx/nginx.conf的http块中 - 单站点生效:写入对应站点配置文件(
/etc/nginx/sites-available/[站点名])的server块中
示例全局配置(修改nginx.conf):
http { # 保留原有配置... passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; passenger_ruby /usr/lib/fullstaq-ruby/versions/2.7-jemalloc/bin/ruby; # 保留原有配置... }
步骤3:验证配置生效
重启Nginx后,执行以下命令检查Passenger使用的Ruby版本:
passenger-config about ruby-command
若输出的Ruby路径为Fullstaq的路径,说明配置生效。若仍为系统Ruby,排查以下点:
- 检查Nginx配置语法:
nginx -t - 确认无局部
passenger_ruby配置覆盖全局设置 - 重启Passenger应用:
passenger-config restart-app /path/to/your/application
步骤4:可选:设置Fullstaq Ruby为系统默认(命令行使用)
若需要命令行默认使用Fullstaq Ruby,通过update-alternatives创建软链接:
sudo update-alternatives --install /usr/bin/ruby ruby /usr/lib/fullstaq-ruby/versions/2.7-jemalloc/bin/ruby 100 sudo update-alternatives --install /usr/bin/gem gem /usr/lib/fullstaq-ruby/versions/2.7-jemalloc/bin/gem 100
然后选择默认版本:
sudo update-alternatives --config ruby sudo update-alternatives --config gem
内容的提问来源于stack exchange,提问作者Shawn Barrick
相关产品推荐
相关产品推荐

