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

升级Ruby与Rails后Apache Passenger部署Rails应用Projects失败求助

Rails 6.1 + Ruby 3.3.1 + Passenger启动失败排查方案

三个从单体拆分的Rails应用(UAM、Proposals、Projects)完成Rails 5.2→6.1.7.7、Ruby 2.7.4→3.3.1升级后,UAM和Proposals可在Apache 2.4+Passenger环境正常部署运行,但Projects的所有实例启动失败,报错:

+ exec /opt/rbenv/versions/3.3.1/lib/ruby/gems/3.3.0/gems/passenger-6.0.22/buildout/support-binaries/PassengerAgent spawn-env-setupper /tmp/passenger.spawn.XXXXLXAXEL --after
/opt/rbenv/versions/3.3.1/bin/ruby: No such file or directory -- Passenger AppPreloader: /opt/projects_int2/current (LoadError) 

本地可正常启动rails console和Puma运行应用,目录权限与另外两个应用一致(www-data可访问),虚拟主机配置仅目录/主机名不同,旧版本配置可正常运行。已升级至最新Passenger、设置默认Ruby版本、尝试Passenger standalone均失败。

排查步骤

1. 确认Passenger与Ruby 3.3.1的兼容性及编译状态

  • 旧版Passenger(如6.0.22)对Ruby 3.3.x的支持可能存在问题,即使升级到最新Passenger,需确保针对Ruby 3.3.1重新编译Apache模块:
    passenger-install-apache2-module
    
    执行时需选择Ruby 3.3.1的路径,完成后更新Apache的Passenger配置文件(如/etc/apache2/mods-available/passenger.conf),确保PassengerRuby、PassengerRoot等路径指向正确版本。
  • 运行passenger-config about ruby-command,验证Passenger关联的Ruby版本是否为3.3.1。

2. 确保Apache进程加载rbenv环境

  • Apache运行时的环境变量与终端不同,需在Apache配置中明确指定Ruby路径,并加载rbenv:
    • 在虚拟主机配置中设置完整的Ruby路径:
      PassengerRuby /opt/rbenv/versions/3.3.1/bin/ruby
      
    • 在/etc/apache2/envvars中添加rbenv路径:
      export PATH="/opt/rbenv/shims:/opt/rbenv/bin:$PATH"
      
    添加后重启Apache:systemctl restart apache2

3. 检查Projects应用的特殊配置与启动日志

  • 对比Projects与UAM/Proposals的配置文件,查看是否存在Passenger/preloader相关的差异设置,比如config/environments/production.rb中的config.preload_frameworks,或虚拟主机中的PassengerPreload指令。
  • 开启Passenger详细日志排查:在虚拟主机配置中添加PassengerLogLevel 3,重启Apache后查看/var/log/apache2/error.log或Passenger日志文件,获取更详细的加载错误信息(如具体哪个文件无法加载)。

4. 验证应用目录的符号链接与权限

  • 如果/opt/projects_int2/current是符号链接,检查其指向的真实目录是否存在,且www-data用户拥有进入目录的权限(目录需有执行权限x):
    ls -l /opt/projects_int2/current
    sudo -u www-data ls /opt/projects_int2/current/config
    
    确保真实目录的权限链(从根目录到应用目录)都允许www-data访问。

5. 确认Ruby 3.3.1的gem依赖完整性

  • 在应用目录下,使用Ruby 3.3.1的bundle重新安装依赖:
    /opt/rbenv/versions/3.3.1/bin/bundle install
    
  • 检查项目目录下的.ruby-version或.rbenv-version文件,确认其内容为3.3.1,避免Passenger加载错误的Ruby版本。

6. 排查Passenger standalone的启动细节

  • 运行Passenger standalone并开启debug日志:
    cd /opt/projects_int2/current
    passenger start --port 3000 --log-level debug
    
    查看输出日志,定位preloader启动失败的具体原因,比如初始化脚本错误、环境变量缺失等。

内容的提问来源于stack exchange,提问作者Ed Allen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:30:59