Redmine 5.0.5安装故障:rvmsudo执行passenger-status报错
解决Redmine 5.0.5中Passenger-status的strscan库版本不兼容问题
核心排查与修复步骤
1. 对齐Ruby版本与Passenger编译环境
- 先检查Passenger编译时依赖的Ruby版本:
对比输出的Ruby路径是否和Redmine使用的passenger-config about ruby-command/usr/local/rvm/gems/ruby-3.0.0/wrappers/ruby一致。如果不一致,说明Passenger是基于其他Ruby版本编译的,需重新编译适配当前版本:
编译完成后更新Apache的Passenger配置文件(通常为rvmsudo passenger-install-apache2-module/etc/apache2/mods-available/passenger.conf),确保PassengerRuby、PassengerRoot、PassengerDefaultRuby全部指向正确的RVM Ruby路径,之后重启Apache。
2. 重建strscan库的本地编译版本
- 直接针对问题库执行pristine操作,强制基于当前Ruby版本重新编译:
rvmsudo gem pristine strscan --version 3.0.6 - 若上述命令无效,卸载后重新安装该版本:
rvmsudo gem uninstall strscan -v 3.0.6 rvmsudo gem install strscan -v 3.0.6
3. 确保sudo上下文加载正确的RVM环境
rvmsudo可能未正确传递RVM环境变量,尝试先切换Ruby版本再执行命令:rvm use 3.0.0 sudo -E /usr/sbin/passenger-status-E参数会保留当前用户的环境变量,确保sudo时使用的是RVM管理的Ruby版本,而非系统默认Ruby。
4. 验证Apache运行的Ruby环境
- 查看Apache错误日志(通常在
/var/log/apache2/error.log),搜索strscan加载失败的细节,确认Apache是否真的使用了配置的PassengerRuby路径。 - 可在Redmine根目录创建测试脚本
test_ruby_env.rb:
在puts "Ruby Version: #{RUBY_VERSION}" puts "Gem Path: #{Gem.path}" puts "Strscan Version: #{Gem.loaded_specs['strscan'].version if Gem.loaded_specs.key?('strscan')}"config.ru开头添加require './test_ruby_env.rb',重启Apache后访问Redmine,查看日志输出的环境信息是否符合预期。
5. 区分Passenger模块与Standalone状态
rvmsudo passenger status查看的是Passenger Standalone的运行状态,而你使用的是Apache集成的Passenger模块,因此该提示属于正常情况,无需关注。- 确认Apache是否正确加载Passenger模块:
若输出apache2ctl -M | grep passengerpassenger_module (shared)说明模块已加载;否则启用模块并重启Apache:rvmsudo a2enmod passenger rvmsudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者user2338823
相关产品推荐
相关产品推荐

