Ubuntu部署Rails:Capistrano调用Puma服务找不到及Nginx启动失败
Rails部署问题修复:Capistrano Puma服务匹配与Nginx启动失败解决
一、解决Capistrano找不到Puma服务单元的问题
DigitalOcean一键Rails包默认使用/etc/systemd/system/rails.service,但Capistrano默认会寻找[项目名]_puma_production.service,需修改Capistrano配置指定服务名称:
在
config/deploy.rb中添加配置,强制Capistrano使用现有服务:set :puma_service_name, 'rails'若需精准指定服务文件路径,可追加:
set :puma_systemd_unit_path, '/etc/systemd/system/rails.service'对齐服务配置与应用部署路径
打开服务器上的/etc/systemd/system/rails.service,确保WorkingDirectory指向Capistrano部署的current目录,示例:WorkingDirectory=/home/rails/[你的项目名]/current同时确认
ExecStart中的Puma启动命令、运行用户(User=rails)、环境变量(RAILS_ENV=production)与应用配置一致。重新部署或重启服务
执行命令让Capistrano使用指定服务完成部署:cap production deploy # 或单独重启Puma服务 cap production puma:restart
二、修复Nginx启动失败(退出码1)问题
退出码1通常是配置语法错误或资源权限/路径问题,按以下步骤排查:
检查Nginx配置语法
执行命令获取具体错误位置:sudo nginx -t输出会明确指出哪个配置文件的哪一行存在问题(比如路径错误、括号不匹配)。
常见错误修复
- 路径错误:确保Nginx配置中
root指向应用的public目录(示例:/home/rails/[你的项目名]/current/public),proxy_pass指向Puma的监听地址(若用Unix Socket,路径应为unix:///home/rails/[你的项目名]/shared/tmp/sockets/puma.sock)。 - 权限问题:给应用
public目录设置正确权限,让Nginx进程可访问:sudo chmod 755 /home/rails/[你的项目名]/current/public sudo chown -R rails:www-data /home/rails/[你的项目名]/current/public - 端口占用:检查80/443端口是否被其他服务占用,用以下命令排查并停止占用服务:
sudo lsof -i :80 sudo systemctl stop [占用服务名]
- 路径错误:确保Nginx配置中
重启Nginx并验证状态
修复配置后重启服务:sudo systemctl restart nginx用以下命令确认启动成功:
systemctl status nginx.service
额外排查建议
- 检查应用日志:查看Puma日志(
/home/rails/[你的项目名]/shared/log/puma.*.log)和Rails生产日志(/home/rails/[你的项目名]/shared/log/production.log),确认应用本身能正常启动。 - 验证环境变量:确保
RAILS_ENV=production在rails.service和应用配置中正确设置,可在服务器上进入current目录执行RAILS_ENV=production rails console测试应用能否正常运行。
内容的提问来源于stack exchange,提问作者user984621
相关产品推荐
相关产品推荐

