使用Capistrano+Puma部署Rails 6项目出现missing keyword: :root报错
部署报错排查解决步骤
两个报错存在关联:ActiveStorage配置错误导致Puma启动失败,没有生成对应的socket文件,进而触发Nginx找不到上游socket的报错,按照以下顺序修复即可:
1. 修复ActiveStorage missing keyword: :root 报错
- 检查生产环境
config/storage.yml配置,必须为Disk类型的存储服务指定root参数,正确配置示例如下:
local: service: Disk root: <%= Rails.root.join("storage") %>
- 若使用Capistrano部署,需将
storage.yml加入共享文件配置:- 把配置正确的
storage.yml上传到服务器/home/ubuntu/apps/appex/shared/config/目录下 - 在项目的
config/deploy.rb中添加配置,将storage.yml纳入linked_files:set :linked_files, fetch(:linked_files, []).push('config/storage.yml', 'config/database.yml')
- 把配置正确的
- 检查生产环境配置文件
config/environments/production.rb,确认ActiveStorage服务指定正确:config.active_storage.service = :local - 配置修改后可先在服务器端验证:进入当前部署的项目目录,执行
RAILS_ENV=production bundle exec rails c,如果控制台能正常启动,说明该报错已修复。
2. 修复Nginx找不到puma.sock报错
- 先验证Puma是否能正常启动:在项目目录执行
RAILS_ENV=production bundle exec puma -C config/puma.rb,查看启动日志无报错即可 - 检查Puma配置文件
config/puma.rb中的socket路径,必须和Nginx配置中的上游路径完全一致,示例配置:bind "unix://#{shared_path}/tmp/sockets/appex-puma.sock" - 确认socket目录权限正常,执行以下命令给运行Puma的用户授权:
sudo chown -R ubuntu:ubuntu /home/ubuntu/apps/appex/shared/tmp/sockets/ - 确认Puma正常运行后,执行
sudo ls /home/ubuntu/apps/appex/shared/tmp/sockets/可以看到appex-puma.sock文件已生成,重启Nginx即可正常访问:sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者dalyl
相关产品推荐
相关产品推荐

