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

使用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加入共享文件配置:
    1. 把配置正确的storage.yml上传到服务器/home/ubuntu/apps/appex/shared/config/目录下
    2. 在项目的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:36:06