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

加载未修改Rails应用遇Passenger Nginx栈溢出错误求助

解决Rails+Passenger启动时的stack level too deep错误

我之前也碰到过类似的Passenger栈溢出问题,结合你的环境(Rails 5.2.2 + Ruby 2.5.5),可以试试下面这些排查和修复步骤:

  • 确认Passenger使用的Ruby版本匹配
    有时候Passenger会默认调用系统Ruby,而非你项目指定的版本。运行以下命令查看Passenger当前关联的Ruby信息:

    passenger-config about ruby-command
    

    如果输出的版本或路径和你的项目Ruby(2.5.5)不一致,在Nginx的server配置块里明确指定Ruby路径:

    passenger_ruby /path/to/your/ruby-2.5.5/bin/ruby;
    

    比如RVM管理的Ruby路径可能是/usr/local/rvm/rubies/ruby-2.5.5/bin/ruby,rbenv的话可能是~/.rbenv/versions/2.5.5/bin/ruby。

  • 排查Rails初始化阶段的递归调用
    栈溢出几乎都是无限递归导致的,先确认问题是否出在Rails本身:

    1. 进入项目目录手动启动Rails服务器:
      cd /var/www/html/railapp && bundle exec rails s
      
      如果本地启动也报stack level too deep,说明问题在Rails代码或配置里,而非Passenger。
    2. 查看Passenger生成的错误详情文件/tmp/passenger-error-Wc9XgI.html,里面有完整的调用栈,找到重复出现的方法——这就是递归的源头。常见原因包括自定义initializer里的无限循环、gem版本冲突引发的递归调用。
    3. 可以尝试临时注释config/initializers/下的自定义初始化文件,逐个恢复排查,定位到引发问题的文件。
  • 验证Gem依赖完整性
    进入项目目录,重新安装并锁定gem依赖:

    bundle install --deployment
    

    Rails 5.2.2和Ruby 2.5.5是兼容的,但部分老旧gem可能在这个组合下出现异常,运行bundle outdated检查是否有需要更新的关键gem(比如rack、activesupport等)。

  • 检查Passenger版本兼容性
    确保你使用的Passenger版本支持Rails 5.2.2,建议升级到最新稳定版的Passenger,然后重启Nginx服务:

    sudo systemctl restart nginx
    
  • 确认文件权限
    保证Nginx运行用户(通常是www-data)对项目目录拥有读写权限,尤其是tmp/和log/目录:

    sudo chown -R www-data:www-data /var/www/html/railapp
    sudo chmod -R 755 /var/www/html/railapp
    

如果以上步骤都无法解决问题,建议把/tmp/passenger-error-Wc9XgI.html里的调用栈信息贴出来,这样能更精准地定位递归源头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:22:08