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

RoR 4.2.10部署故障:Nginx默认页未替换,改配置后Puma仍异常

解决RoR 4.2.10 + Nginx/Passenger/Puma站点异常问题

咱们先把你的问题拆解清楚:Webrick能正常跑说明应用本身没问题,但Nginx要么跳默认页,要么报找不到文件,现在Puma启动了但还是卡壳。下面一步步来排查修复:

一、先搞定Nginx显示默认页的核心问题

Nginx显示默认页,90%是你的站点配置没被正确加载,或者优先级输给了默认配置。

  • 先检查配置是否被启用:
    大多数系统里,Nginx会从/etc/nginx/sites-available/读取配置,但需要软链接到/etc/nginx/sites-enabled/才会生效。跑个命令看看:
    ls -l /etc/nginx/sites-enabled/
    
    如果看不到geofly.conf的软链接,赶紧补上:
    sudo ln -s /etc/nginx/sites-available/geofly.conf /etc/nginx/sites-enabled/
    
  • 把默认配置干掉:
    如果sites-enabled里还留着default.conf,直接删了它,省得抢优先级:
    sudo rm /etc/nginx/sites-enabled/default
    
  • 验证配置语法再重启:
    修改完配置千万别直接重启,先验证语法避免炸锅:
    sudo nginx -t
    
    看到test is successful再重启Nginx:
    sudo systemctl restart nginx
    

二、修复"shared/log/public/index.html not found"的离谱报错

这个错误太明显了——你的Nginx配置里root路径指错地方了!shared/log/是存日志的,怎么会找得到静态文件?

正确的RoR部署(比如用Capistrano的话),静态文件根目录是current/public。赶紧改geofly.conf里的root配置:

server {
  listen 80;
  server_name your-domain.com; # 这里填你的域名或者0.0.0.0,别空着

  # 重点:指向RoR应用的public目录,别再指日志目录了!
  root /home/deploy/geofly/current/public;

  # 如果用Passenger,保留这段
  passenger_enabled on;
  passenger_ruby /home/deploy/.rvm/wrappers/ruby-2.3.8/ruby; # 换成你实际的Ruby路径,用`which ruby`在deploy用户下查

  # 如果现在改用Puma,换成这段配置
  location @puma {
    proxy_pass http://unix:/home/deploy/geofly/shared/tmp/sockets/geofly-puma.sock;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  location / {
    try_files $uri $uri/index.html $uri.html @puma;
  }
}

额外提醒:

  • 用Passenger的话,passenger_ruby必须指向正确的Ruby版本,别用系统默认的,不然会出问题;
  • 用Puma的话,要确保socket文件路径和配置一致,而且Nginx要有读写权限——可以把Nginx用户加到deploy组:sudo usermod -aG deploy www-data。

三、Puma启动后仍有问题的排查方向

如果Puma已经起来了,但站点还是打不开,试试这些排查点:

  • 看Puma日志:日志在/home/deploy/geofly/shared/log/puma.log,有没有启动失败或者请求报错;
  • 看Nginx错误日志:比如/var/log/nginx/error.log,找有没有权限问题或者路径错误;
  • 检查socket权限:跑ls -l /home/deploy/geofly/shared/tmp/sockets/,确保socket文件是deploy用户所有,而且www-data能读;
  • 直接测Puma:用curl访问socket,看Puma能不能正常响应:
    curl --unix-socket /home/deploy/geofly/shared/tmp/sockets/geofly-puma.sock http://localhost/
    
    如果能返回应用内容,说明Puma没问题,问题在Nginx配置或者权限。

最后说一句:每次改完配置,一定要重启对应的服务(Nginx或Puma),不然配置白改!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:41:08