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

Ruby无法找到Capistrano current目录的排查求助

RoR应用Passenger启动故障排查

环境配置

  • 操作系统:Alma Linux 8.10
  • Web服务器:Apache 2.4.37
  • Passenger版本:mod_passenger 6.0.23
  • Ruby管理:rbenv,Ruby版本3.3.3
  • Rails版本:7.2.1
  • 部署工具:capistrano 3.19.1 + capistrano-passenger 0.2.1

故障现象

部署后首次访问/var/www/me.mio/current应用时,Apache错误日志/var/log/httpd/error_log出现如下错误:

/home/user/.rbenv/versions/3.3.3/bin/ruby: No such file or directory -- Passenger AppPreloader: /var/www/me.mio/current (LoadError)
[...age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /var/www/me.mio/current: The application process exited prematurely.

age/Cor/Con/CheckoutSession.cpp:284 ]: Cannot checkout session because a spawning error occurred.

解读:Ruby提示Capistrano的current目录不存在(感谢engineersmnky的评论)

查看passenger-status发现,该应用未生成任何进程,其他同配置应用均正常运行:

Version : 6.0.23
Date    : 2024-09-03 10:39:24 +0000
Instance: LEqbzjUQ (Apache/2.4.37 (AlmaLinux) OpenSSL/1.1.1k Phusion_Passenger/6.0.23)

----------- General information -----------
Max pool size : 6
App groups    : 5
Processes     : 4
Requests in top-level queue : 0

----------- Application groups -----------
/var/www/me.mio/current (production):
  App root: /var/www/me.mio/current
  Requests in queue: 0

/var/www/smd/current (production):
  App root: /var/www/smd/current
  Requests in queue: 0
  * PID: 128934   Sessions: 0       Processed: 7       Uptime: 1h 15m 50s
    CPU: 0%      Memory  : 78M     Last used: 3m 35s

# 其他正常应用信息省略...

已完成的排查步骤

  • 确认/var/www/me.mio/current目录真实存在
  • 目录内.ruby-version文件内容为3.3.3,rbenv环境识别正常:
    $ cat .ruby-version # 3.3.3
    $ rbenv version # 3.3.3 (set by /var/www/me.mio/current/.ruby-version)
    $ ruby -v # ruby 3.3.3 ...
    $ which ruby # ~/.rbenv/shims/ruby
    
  • 确认Ruby可执行文件存在且可正常运行:
    $ ls -l ~/.rbenv/versions/3.3.3/bin/ruby
    -rwxr-xr-x 1 ... 217824 Jun 13 19:00 /home/user/.rbenv/versions/3.3.3/bin/ruby
    $ ~/.rbenv/versions/3.3.3/bin/ruby -v # ruby 3.3.3 ...
    
  • 执行rbenv rehash无效果
  • 检查Passenger生成的/tmp/.../passenger-error-*.html文件,无有效错误信息
  • Apache虚拟主机配置已指定PassengerRuby /home/user/.rbenv/shims/ruby和PassengerMinInstances 1

排查思路与解决方案

1. 权限排查

  • 检查应用目录及路径权限,确保Apache运行用户(通常为apache或httpd)拥有完整读权限:
    # 检查目录权限
    ls -ld /var/www/me.mio
    ls -ld /var/www/me.mio/current
    # 确认软链接指向正确的release目录
    ls -l /var/www/me.mio/current
    # 递归检查路径每一级权限
    namei -l /var/www/me.mio/current
    
  • 检查Ruby安装目录权限,确保Apache用户可访问Ruby可执行文件:
    ls -ld /home/user/.rbenv
    ls -ld /home/user/.rbenv/versions/3.3.3
    

2. Passenger配置调整

  • 尝试在虚拟主机配置中直接指定Ruby绝对路径,避开rbenv shim的环境变量问题:
    <VirtualHost *:443>
      ...
      PassengerRuby /home/user/.rbenv/versions/3.3.3/bin/ruby
      ...
    </VirtualHost>
    
    修改后重启Apache,重新访问应用测试。
  • 为Apache添加rbenv相关环境变量,确保进程启动时加载正确路径:
    SetEnv RBENV_ROOT /home/user/.rbenv
    SetEnv PATH /home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH
    
    将上述配置添加到虚拟主机或全局Apache配置中,重启后测试。

3. 应用部署与初始化验证

  • 重新执行Capistrano部署,确保current软链接正确生成且release目录完整:
    cd /var/www/me.mio
    cap production deploy
    
  • 手动启动Rails生产环境控制台,验证应用本身是否能正常初始化:
    cd /var/www/me.mio/current
    rails c production
    
    若控制台启动失败,根据输出的错误信息排查代码或依赖问题。

4. Passenger进程清理

  • 强制重启目标应用的Passenger进程:
    passenger-config restart-app /var/www/me.mio/current
    
  • 停止所有Passenger进程后重启Apache:
    passenger stop
    systemctl restart httpd
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:08:13