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

Capistrano+Nginx+Passenger部署Rails应用时出现404错误求助

Capistrano+Nginx+Passenger部署Rails应用时出现404错误求助

看起来你遇到的是Capistrano能正常完成部署,但访问域名时Passenger返回404、同时伴随Bundler相关报错的问题,我结合自己踩过的坑给你几个排查方向:

  • 先核对Nginx配置里的路径是否正确
    这是404最常见的原因之一:你要确保Nginx配置中root指向的是Rails应用current目录下的public文件夹,比如root /home/deploy/your_app_name/current/public;,同时passenger_app_root要指向current根目录:passenger_app_root /home/deploy/your_app_name/current;。如果路径写错,Passenger找不到应用入口就会返回404。

  • 排查Bundler的依赖加载问题
    从Nginx日志里的报错片段来看,Bundler在执行setup时出了问题,大概率是依赖安装不完整或者Ruby环境没对齐:

    1. 登录服务器切换到deploy用户,进入应用的current目录,手动执行bundle install --deployment,确认所有依赖都安装成功;
    2. 检查Passenger使用的Ruby版本是否和你部署用的rbenv版本一致:执行passenger-config about ruby-command,如果输出的路径不是/home/deploy/.rbenv/versions/2.6.1/bin/ruby,就需要在Nginx配置里手动指定:passenger_ruby /home/deploy/.rbenv/versions/2.6.1/bin/ruby;
  • 查看Rails生产环境日志找根源
    页面显示的是通用错误提示,你可以去应用current/log/production.log里看详细报错,比如是不是数据库连接失败、资产预编译没完成,或者某个初始化脚本出了问题,这些都会导致Passenger无法正常启动应用,进而返回404。另外也可以确认下部署时是否执行了RAILS_ENV=production rails assets:precompile,如果Capistrano的自动任务没跑成功,手动执行一次试试。

  • 检查文件权限是否到位
    确保deploy用户对应用目录有完整的读写权限,尤其是log、tmp、public这些文件夹,Passenger需要权限写入日志和临时文件。可以执行chown -R deploy:deploy /home/deploy/your_app_name来统一权限。

  • 最后别忘了重启服务
    不管改了配置还是依赖,都要重启Nginx让配置生效:sudo systemctl restart nginx,也可以单独重启Passenger应用:passenger-config restart-app /home/deploy/your_app_name/current

备注:内容来源于stack exchange,提问作者Asmithdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:34:53