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

Capistrano部署Rails应用报Passenger未运行、Nginx无法重启错误

故障修复方案

核心问题是Nginx服务当前已经停止运行,你操作重载时收到的nginx.service is not active, cannot reload.提示已经实锤这个状态。Passenger是作为Nginx模块加载运行的,Nginx没启动的话Passenger根本不会跑,passenger-config restart-app找不到正在运行的Passenger实例自然会抛你看到的错,先别纠结环境变量、目录被删这两个提示,那是Nginx正常运行时才需要排查的方向,按下面步骤走:

  • 先查Nginx配置错在哪
    直接跑sudo nginx -t,这个命令会把配置里的语法错误、路径写错、权限不足的问题精准标到具体行号。你第一次改完配置重启没报错不代表后面没问题,90%的概率是你改站点配置的时候漏了Passenger相关参数、或者Ruby路径填错了,导致Nginx启动失败退出。
  • 对着报错改配置
    高频踩坑点列在这,对照着查:
    • Nginx配置里没写passenger_root和passenger_ruby两个必填项,passenger_ruby别瞎填系统自带Ruby的路径,切到deploy用户跑which ruby,把输出的rbenv下Ruby 3.1.2的完整路径填进去
    • 站点配置里的项目路径写错、Nginx用户没权限读项目目录/写日志目录、sites-enabled里的配置软链接断了
  • 改完启动Nginx验状态
    配置修完跑sudo systemctl start nginx,启动完立刻跑sudo systemctl status nginx,确认状态显示active (running),没有红色报错信息。
  • 验Passenger状态再部署
    跑sudo passenger-config list-instances,如果能正常输出实例信息,直接重新跑cap production deploy,流程就能正常走完。
  • 兜底修复(Nginx正常启动仍报错时再用)
    如果Nginx确实跑着还是报同样的错,再处理实例目录被系统清理的问题:Ubuntu默认的tmpfiles定时任务会清/tmp目录下长时间没访问的文件,Passenger默认把实例注册信息存在/tmp下,时间长了可能被误删。解决方法很简单,在Nginx的http配置块里加一行passenger_instance_registry_dir /var/run/passenger-instreg;,然后依次跑下面三条命令:
    sudo mkdir -p /var/run/passenger-instreg
    sudo chown www-data:www-data /var/run/passenger-instreg
    sudo systemctl restart nginx
    
    这么改完不用额外配什么PASSENGER_INSTANCE_REGISTRY_DIR环境变量,Nginx模块会自动把目录路径传给Passenger的命令行工具,不会再找不到实例。

原始报错关键信息

00:34 passenger:restart
  01 passenger-config restart-app /home/deploy/myapp --ignore-app-not-running
  01 *** ERROR: Phusion Passenger(R) doesn't seem to be running.
nginx.service is not active, cannot reload.
Phusion Passenger(R) 6.0.14
passenger-config exit status: 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:48:25