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配置里没写
- 改完启动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 nginxPASSENGER_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
相关产品推荐
相关产品推荐

