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 -ttest 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能不能正常响应:
如果能返回应用内容,说明Puma没问题,问题在Nginx配置或者权限。curl --unix-socket /home/deploy/geofly/shared/tmp/sockets/geofly-puma.sock http://localhost/
最后说一句:每次改完配置,一定要重启对应的服务(Nginx或Puma),不然配置白改!
内容的提问来源于stack exchange,提问作者uberdave
相关产品推荐
相关产品推荐

